(1) 정규문법을 정규표현으로 바꾼다.
X -> αX
X -> β
위 둘을 하나로 합하면
X -> αX | β
등호로 표현하면
X = αX + β
이게 X = α^*β다.
이 공식을 외우는 방법은
α 다음의 X를 위로 보내고 β를 붙인다고 생각한다.
. 화살표가 있는 것은 문법이다. 위는 터미널이 하나만 있으므로 정규문법이다.
. 등호로 표현하면 표현이 된다. 넌터미널로 표현하면 정규표현이다.
예시문제다.
G = ( { S , A , B } , { a , b } , P , S )
S -> aS | bS | b
S = aS + bS + b
= (a+b)S+b
= (a+b)^*b
(2) 퍼스트(FIRST)는 처음 만나는 터미널(소문자)다. 그게 없으면 처음 만나는 대문자를 따라가서 소문자를 찾아낸다. 처음이니 입실론 ε은 가능하다. 퍼스트는 LR(1) 구문 분석의 룩 어헤드(look ahead)를 구할 때 사용된다.
파싱표 만드는 순서다.
(1) 트리를 그린다
(2) 어떤 게 큰가? 하고 묻는다
(3) 자식이 크다는 규칙으로 부등식을 만든다.
(4) 이 순위를 보고 파싱표를 만든다
스택과 입력열이 있다.
입력열과 스택의 강도를 보고 처리를 결정한다.
. 입력 >= 스택: 입력이 스택에 들어간다.
. 입력 < 스택: 핸들을 찾았다. 스택을 대문자로 변경한다(리듀스 한다, 빽한다)
입력 문자열의 처음을 찾는 과정이다. 입력문자열을 스택에 넣을지 말지를 파싱표가 결정한다. 핸들을 찾으면 뒤로 빽할 수 있다.
스택에 넣는 것을 쉬프트
대문자로 빽하는 것을 리듀스라 한다.
2. SLR
파싱표 만드는 순서다.
(1) 증가문법을 만든다
(2) LR(0)의 카노니컬 컬렉션을 구한다. LR(0)는 생성규칙 오른쪽에 있는 항에 점이 찍힌 것을 말한다. 클로저는 LR(0)항목을 구하는 함수다. 카노니컬 컬렉션은 LR(0)항목의 집합이다. 이 컬렉션이 상태의 집합이다.