Similar presentations:
Построить LL-анализатор для языка, порождаемого грамматикой. (Вариант 3)
1.
Вариант № 3Построить LL-анализатор для языка,
порождаемого грамматикой
G = (VN, VT, P, S), где
VN ={P, S, D , L}, VT ={a, int, =, :, ; , , },
P = {(1) P D ; L
(2-3) S a = a a : S
(4-5) D int a D , a
(6-7) L L ; S S}
1
2.
Вариант № 3Решение: Данная грамматика леворекурсивна, следовательно, она не LLграмматика. Исключим левую рекурсию:
(1) P D ; L
(5-6) D' , aD'
(2-3) S a = a a : S
(7) L SL'
(4) D int a D'
(8-9) L' ; SL'
Ясно, что полученная грамматика не LL(1) (см. правила 2-3). Проверим
условие LL(2). Для этого построим для всех A {P, S, D, D', L}
G
функцию FIRST 2 ( A) :
F0
F1
F2
F3 = F2
P
{int a}
{int a}
S
{a = a : }
{a = a : }
{a = a : }
{a = a : }
D
{int a}
{int a}
{int a}
{int a}
D'
{, a }
{, a }
{, a }
{, a }
L
{a = a : }
{a = a :}
{a = a :}
L'
{ }
{; a }
{; a }
{; a }
2
3.
Вариант № 3Проверим условие сильной LL(2)-грамматики. Достаточно проверить для
нетерминалов D' и L' условие вида:
G
G
G
G
FIRST 2 (β FOLLOW 2 (A)) FIRST 2 (γ FOLLOW 2 (A)) .
G
Построим FOLLOW G2 (D ') {; a}, FOLLOW 2 (L ') { }.
G
G
G
G
FIRST 2 (, aD'FOLLOW 2 (D')) FIRST 2 (ε FOLLOW 2 (D')) {, a} {; a}= .
G
G
G
G
FIRST 2 (; SL'FOLLOW 2 (L')) FIRST 2 (ε FOLLOW 2 (L')) {; a} { }= .
Итак, рабочая грамматика сильная LL(2)-грамматика. Поэтому можно
применить алгоритм построения 2-предсказывающего алгоритма анализа
без построения LL(2)-таблиц.
3
4.
Вариант № 3a=
a:
P
S
int a
;a
,aD' 5
6
a=a 2
;
$
,
;
SL' 7 SL' 7
9
;SL' 8
pop
pop
pop
pop
pop
=
,
=
int a D' 4
L'
int
int
a:S 3
D'
a
a
D;L 1
D
L
,a
pop
pop
pop
pop
pop
accept
4
5.
Вариант № 4Пример.
6
2
P D ; L int a D' ; L int a ; L int a ; SL' int a ; a = a L'
1
4
7
9
9
int a ; a = a.
(int a ; a = a , P$, )
(; a = a , D';L$, 14)
( a = a , SL'$, 1467)
(int a ; a = a , D;L$, 1)
(; a = a , ;L$, 146)
(int a ; a = a , int aD';L$, 14)
( a = a , L$, 146)
( a = a , a=aL'$, 14672)
( , L'$, 14672)
( , $, 146729).
5