1. 문법 G (S)
(1) S -> AB
(2) A -> 다 | ε
(3) B -> CC
(4) C -> AADC | ε
(5) D -> B | ε
문법 G (S)는 LL (1) 문법 아니다 확인?
해결 방법 :
제 (AB) = {B, A, C}
최초의 (다) = {B, A}
최초의 (E) = E {}
첫 번째 (CC) = {C}
첫 번째 (AADC) = {A}
우선, (B) = {B}
에 따라 (S) = {C, B, A}
따라 (A) = {A, B, C} #
에 따라 (B) = {A, B, C}
에 따라 (C) = {#}
에 따라 (D) = {#, A}
Sellect (A-> 다) = {B, A}
Sellect (A-> ε) = {A, B, C} #
이후 Sellect (A-> 다) ∩Sellect (A-> ε) ≠ Ø, LL (1) 구문 G (S)되지 알 수있다.
식 문법은 LL (1) 문법인지 왼쪽 재귀의 제거 후 2 (마지막 작업)?
( . 1 ) SELECT 설정 :
SELECT (E-> TE ') = 첫 번째 (TE') = {(I}
SELECT (E '-> + TE') = 첫 번째 (+ TE ')} = {+
SELECT (E '-> E) = FIRST (E) - {E} UFOLLOW (E') = FOLLOW (E ') = {)} #
SELECT (T-> FT ') = 첫 번째 (FT') = {(I}
SELECT (T '-> * FT') = 첫 번째 (* FT ') = {} *
SELECT (T '-> ε) = FIRST (ε) - {ε} UFOLLOW (T') = FOLLOW (T ') = {+), #}
SELECT (F -> (E)) = FIRST ((E)) = {(}
SELECT (F-> I) = FIRST (I) = {I}
해결 방법 :
SELECT (E '-> + TE') ∩SELECT (E '-> ε) = O
SELECT (T '-> * FT') ∩SELECT (T '-> ε) = Ø
SELECT (F -> (E)) ∩SELECT (F-> I) = Ø
따라서 얻을 수 있고,이 문법은 LL (1) 구문이다.
(2)
선택 세트 :
SELECT (A-> A ') = 첫 번째 (A') = {A}
SELECT (A '-> 아베) = FIRST (아베) = {A}
SELECT (A '-> ε) = FIRST (ε) - {ε} UFOLLOW (A') = FOLLOW (A ') = {(D), #}
SELECT (B-> dB ') = 첫 번째 (dB') = {D}
SELECT (B '-> 중에 bB') = FIRST (BB ') = {B}
SELECT (B '-> ε) = FIRST (ε) - {ε} UFOLLOW (B') = FOLLOW (B ') = E {}
해결 방법 :
SELECT (A '-> 아베) ∩SELECT (A'-> ε) = Ø
SELECT (B '-> 중에 bB') ∩SELECT (B '-> ε) = Ø
따라서 얻을 수 있고,이 문법은 LL (1) 구문이다.
(삼)
선택 세트 :
SELECT (S-> 경계 필터링 ') = FIRST (BS') = {B}
SELECT (S '-> BAS') = 첫 번째 (BAS ') = {A}
SELECT (S '-> ε) = FIRST (ε) - {ε} UFOLLOW (S') = FOLLOW (S ') = {#}
SELECT (B-> AB) = FIRST (AB) = {A}
해결 방법 :
SELECT (S '-> BAS') ∩SELECT (S '-> ε) = Ø
따라서 얻을 수 있고,이 문법은 LL (1) 구문이다.
(4)
선택 세트 :
SELECT (S-> AP) = FIRST (AP) = {A, C, P}
SELECT는 (A-> a)를 FIRST = (a) = {A}
SELECT (A-> ε) = FIRST (ε) - {ε} UFOLLOW (A) = FOLLOW (A) = {P}
SELECT (A-> CA) = FIRST (CA) = {C}
{A} SELECT (A-> AA) = FIRST (AA) =
해결 방법 :
SELECT (A-> a) ∩SELECT (A-> AA) ≠ Ø
따라서이 문법은 LL (1) 구문없는 얻을 수있다.
(5)
선택 세트 :
SELECT (S-> AP) = FIRST (AP) = {A, C}
SELECT (S-> Bp에) = FIRST (BQ) = {B, D}
SELECT는 (A-> a)를 FIRST = (a) = {A}
SELECT (A-> CA) = FIRST (CA) = {C}
SELECT (B-> B) = FIRST (b) = {B}
SELECT은 (B-> dB) = FIRST (dB) = {D}
해결 방법 :
SELECT (S-> AP) ∩SELECT (S-> Bp에) = Ø
SELECT (A-> a) ∩SELECT (A-> CA) = Ø
SELECT (B-> b) ∩SELECT (B-> dB) = Ø
따라서 얻을 수 있고,이 문법은 LL (1) 구문이다.
제 2 연결,이 LL 인 경우 (1) 문법 그 재귀 하강 파서 코드 물품.
(1) (2) (3) (5) 재귀 하강 파서 코드는 다음된다 :
(1)
공허 parseE () {
경우 (룩어 == '('I)
{Prset ();
parseE '();
}
}
공허 parseE '() {
만약 (내다 == '+') {
Frset ();
parseE '();
}
다른 경우 (내다 == ')', '#')
{}
}
공허 parseT () {
(룩어 경우 == '('I) {
경기 토큰 (*);
parseF ();
Prset '();
}
다른 경우 (룩어 == '+', ')', '#') {
}
}
공허 parseF () {
(룩어 경우 == '(') {
경기 토큰 (();
parseE ();
()) 토큰과 일치;
}
다른 경우 (룩어 == I) {
(의) 일치 토큰;
}
}
(2)
공허 parseA () {
만약 (내다 == A)
{matchtoken (a);
parseA '();
}
}
공허 parseA '() {
만약 (내다 == A) {
parseA ();
parseB ();
matchtoken (e);
}
다른 경우 (룩어 == D #) {
}
}
공허 parseB () {
경우 (룩어 == d)
{matchtoken (d);
parseB '();
}
}
공허 parseB '() {
경우 (룩어 == b)
{matchtoken (b);
parseB '();
}
다른 경우 (내다 == 전자) {
}
}
(삼)
공허의 구문 분석 () {
경우 (룩어 == b) {
Matchtoken (b);
파싱 '();
}
}
공허의 구문 분석 '() {
만약 (내다 == A) {
parseB ();
matchtoken (a);
파싱 '();
}
그렇지 않은 경우 (내다 == #) {
}
}
공허 parseB () {
만약 (내다 == A) {
Matchtoken (a);
Matchtoken (b);
}
}
(5)
공허의 구문 분석 () {
경우 (룩어 == A, C) {
ParseA ();
Matchtoken (p);
}
그렇지 않은 경우 (룩어 == B, D) {
parseB ();
matchtoken (p);
}
}
공허 parseA () {
만약 (내다 == A) {
Matchtoken (a);
}
그렇지 않은 경우 (룩어 == c) {
Matchtoken (c);
parseA ();
}
}
공허 parseB () {
경우 (룩어 == b) {
Matchtoken (b);
}
그렇지 않은 경우 (룩어 == d) {
Matchtoken (d);
parseB ();
}
}