일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- C언어
- 객체지향설계
- Linear Algebra
- 자연어처리
- 파싱
- Agile
- 가상메모리
- 컴파일러
- 파싱테이블
- React
- NLP
- 데이터베이스
- 컴파일
- 소프트웨어공학
- 애자일
- css
- 836
- 스케줄러
- 클래스
- 정보검색
- 언어모델
- DB
- 데이터분석
- 운영체제
- 랩실일기
- 프로세스
- OS
- 웹소프트웨어
- 벡터
- 오픈소스웹소프트웨어
Archives
- Today
- Total
observe_db
[컴파일러] 14. LALR 파싱 테이블 본문
SLR = Simple LR
CLR = Canonical LR
LALR = Look Ahead LR
파싱시 look ahead symbol을 하나만 보는 SLR(1), CLR(1), LALR(1)은 1을 생략하여 SLR, CLR, LALR로 부름
아이템 집합 구성시의 LR(0), LR(1)에서 숫자는 아이템에 포함시켜 나타낸 look ahead(예측 기호)의 갯수를 나타냄
canonical LR 파싱 테이블 구성
- 예측기호 포함
- 적합하지 않은 reduce를 위해 더 많은 정보 포함
- 두번째 요소로서 단말 기호 포함
- [A->α●,a]
- 입력기호 a가 올 경우만 reduce 수행
- a는 FOLLOW(A)의 부분집합
Closure(I), LR(1) 아이템 집합의 구성
- I에 있는 모든 아이템을 closure(i)에 넣는다.
- [A->α●Bβ,a]가 Clousre(I)에 속해있고 B->γ 및 FIRST(β a)에 포함되는 각 단말기호 b에 대해 아이템[B->●γ,b]가 closure(I)에 없을 경우
Goto 연산
- goto(I, X): I는 아이템 집합, X는 문법기호
- goto(I, X)는 [A-> αX●β, a]에 대해 [A-> αX●β, a]의 집합 J
아이템 집합군 구성
canonical LR(1)의 아이템 집합군 구성 알고리즘
procedure items(G');
begin
C:={closure({[S'-> ●ㄴ, $]})};
repeat
for C의 각 아이템 집합 I와 문법기호 X에 대해(단 goto(I,X)는 빈것이 아니고 C에 포함되지 않음)
do goto(I,X)를 C에 추가
until C에 추가할 아이템 집합이 더 이상 없다.
end
LALR 파싱
기본 원리
- 핵 문법의 첫번째 요소
- 같은 핵을 가진 문법을 합쳐 상태수를 줄임
- CLR보다 오류를 늦게 감지
파싱테이블 구성
- 입력: 확장 문법 G'
- 출력 G'에 대한 LALR 파싱 테이블 함수
방법
- LR(1) 아이템 집합군 C을 구성
- 아이템 집합에서 같은 핵을 가진 아이템을 합침
- 새로 합친 아이템 집합군에 대해 canonical LR 파싱 테이블 구성 알고리즘을 적용하여 파싱 테이블을 만든다.(오류이면 LALR(1)문법이 아님)
오류감지
늦은 오류 감지
- 이 문법은 c*dc*d생성
- 첫번째 c들을 이동하고 다음 d를 스택에 넣고 상태 4로 감
- CLR의 경우 다음 입력기호가 c나 d일 경우만 reduce C->d를 수행
- 합친 상태에서 다음 입력기호 $에 대해 reduce를 수행하면 ccd와같은 입력을 받아서 오류가 됨
- LALR파서는 일단 수행하고 나중에 오류로 처리함.
'학교 공부 > 컴파일러(3-1)' 카테고리의 다른 글
[컴파일러] 13. SLR 파싱테이블 (0) | 2023.06.02 |
---|---|
[컴파일러] 최종 프로젝트의 제작. (0) | 2023.05.31 |
[컴파일러] 12. 오토마타 (0) | 2023.05.31 |
[컴파일러] 11. 정규언어 (0) | 2023.05.31 |
[컴파일러] 10. 형식언어 (0) | 2023.05.30 |
Comments