- A -> aj
Певр(A -> aj) = {a}
f(S,a,A) = (S,j*)
- A -> $
f*(S,x,A) = (S,$)
x принадлежит Выбор( A -> $)
- A -> Bj
f*(S,x,A) = (S,j*B)
x принадлежит Выбор( A -> Bj)
- f(s,a,a) = (S,$)
- f*(S,$,h0) = (S,$)
Пример:
Int *a[] … [];
Char $b , …;
Int a, *b[][];
Char *b, *a, *b[];
Правила грамматики:
- I -> TS;
- T -> int | char
- S -> ABCR
- A -> * | $
- B -> a | b
- C -> []C | $
- R -> ,ABCR
Перв(1) = {int, char}
Перв(2.1) = {int}
Перв(2.2) = {char}
Перв(3) = {*,a, b}
Перв(4.1) = {*}
Перв(4.2) = {$}
Перв(5.1) = {a}
Перв(5.2) = {b}
Перв(6.1) = {[}
Перв(6.2) = {$}
Перв(7.1) = {,}
Перв(7.2) = {$}
След(T) = Перв(S) = Перв(A) & Перв(B) = {*,a, b}
След(S) = {;}
След(A) = Перв(B) = {a,b}
След(B) = Перв(C) & Перв(R) & Перв(S) = {[, , ,;}}
След(C) = Перв(R) & След(S) = {, , ;}
След(R) = Перв(S) & След(S) = {;}
Выбор(1) = {int, char}
Выбор(2.1) = {int}
Выбор(2.2) = {char}
Выбор(3) = {*,a,b}
Выбор(4.1) = {*}
Выбор(4.2) = След(A) = {a,b}
Выбор(5.1) = {a}
Выбор(5.2) = {b}
Выбор(6.1) = {[}
Выбор(6.2) = След(C) = {, , ;}
Выбор(7.1) = {,}
Выбор(7.2) = След(R) = {;}
Проверка LL1 грамматики.
Данная грамматика является LL1 грамматикой, так как элементы множества Выбор для правил с одинаковым левым нетерминалом не пересекаются.
Строим команды распознавания:
- f*(S, int, I) = (S, ;ST)
- f*(S, char, I) = (S, ; ST)
- f(S, int, T) = (S, $)
- f(S, char, T) = (S, $)
- f*(S, *, S) = (S, RCBA)
- f*(S, a, S) = (S, RCBA)
- f*(S, b, S) = (S, RCBA)
- f(S, *, A) = (S, $)
- f*(S, a, A) = (S, $)
- f*(S, b, A) = (S, $)
- f(S, a, B) = (S, $)
- f(S, b, B) = (S, $)
- f(S, [, C) = (S, C])
- f*(S, ;, B) = (S, $)
- f*(S, , , B) = (S, $)
- f(S, , , B) = (S, RCBA)
- f(S, ;, R) = (S, $)
- f(S, ;, ;) = (S, $)
- f(S, ], ]) = (S, $)
- f(S, $, h0) = (S, $)
Пример распознавания:
(S, int *a[], b; h0I) ->(1) -> (S, int *a[], b; h0;ST) ->(3) -> (S, *a[], b; h0;S ) -> (5)->
(S, *a[], b; h0;RCBA) ->(8) -> (S, a[], b; h0;RCB ) ->(11) -> (S, [], b; h0;RC ) ->(13) ->
(S, ], b; h0;RC] ) ->(19) -> (S, , b; h0;RC ) ->(15) -> (S, b; h0;RCBA ) ->(10) ->
(S, b; h0;RCB ) ->(12) -> (S, ; h0;RC ) ->(14) -> (S, ; h0;R ) ->(17) ->
(S, ; h0; ) ->(18) -> (S, h0 ) -> (S, $, $ )
Дата добавления: |
Просмотров: 6304 |
|