- •Содержание
- •Введение
- •1 Организация таблицы идентификаторов
- •1.1 Исходные данные
- •1.2 Назначение таблицы идентификаторов
- •1.3 Метод простого рехэширования
- •1.4 Метод бинарного дерева
- •1.5 Результат выполнения программы
- •2 Проектирование лексического анализатора
- •2.1 Исходные данные
- •2.2 Назначение лексического анализатора
- •2.3 Схема распознавателя
- •2.4 Результат выполнения программы
- •3 Построение дерева вывода
- •3.1 Исходные данные
- •3.2 Синтаксический анализатор
- •3.3 Таблицы предшествования
- •Матрица предшествования исходной грамматики
- •3.4 Результат выполнения программы
- •3.5 Вывод
- •Заключение
- •Список литературы
- •Приложение а – Листинги программы
3.3 Таблицы предшествования
Множество правил грамматики имеет вид:
S → prog L end.
L → O | L;O | L;
B→ B or C | C
C→ C and D | D
D → G | not D
G → E < E | E>E | E=E | (B)
K → G then O
M → K else O
Q → G do O
O → if M | if K| begin L end | while Q | c:=E
E → E-F | E+F | E++|
F → (E) | c | g
Грамматика является грамматикой операторного предшествования, так как она не содержит l-правил и правые части правил не содержат смежных нетерминальных символов. Построим множества крайних левых и крайних правых символовL(U),R(U) относительно всех нетерминальных символов грамматики.
Таблица 3.1
Множества крайних правы и крайних левых символов
Символ (U) |
Начало построения |
Результат | ||
L(U) |
R(U) |
L(U) |
R(U) | |
S |
prog |
end. |
prog |
end. |
L |
O L |
O; |
OL if begin do c |
OMKQEGF ) c g end ; |
B |
B C |
C |
BCDG not E(F c g |
CDQEF ) c g end |
C |
C D |
D |
CDG not E(F c g |
DGEF ) c g end |
D |
G not |
GD |
G not E(F c g |
DGEF ) c g end |
G |
E( |
E) |
E(F c g |
EF ) c g end |
K |
G |
O |
GE (FCD |
OMKQEGF ) c g end |
M |
K |
O |
GKE(F c g |
OMKQEGF ) c g end |
Q |
O |
G |
If begin do c |
GE)Fc g |
O |
If begin do c |
MK end Q E |
EF do c |
MK end QEOGF) cg |
E |
E F |
F ++ |
EF ( c g |
F ) c g |
F |
( c g |
) c g |
( c g |
) c g |
На основе полученных множеств построим множества крайних левых и крайних
правых терминальных символов Lt(U),Rt(U) относительно всех нетерминальных символов грамматики.
Таблица 3.2
Множества крайних правых и крайних левых терминальных символов
Символ (U) |
Начало построения |
Результат | ||
L(U) |
R(U) |
L(U) |
R(U) | |
S |
prog |
end. |
prog |
end. |
L |
; |
; |
if begin do c |
if end do := else then while - + ++ ; < > = ) c g |
B |
or |
or |
or and not < > = ( - + ++ c g |
and not - + ++ ; < > = ) c g |
C |
and |
and |
and not < > = ( - + ++ c g |
not <> = ) -+ ++) c g and |
D |
not |
not |
or not < > = ( - + ++ c g |
< > = ) not - + ++ c g |
G |
< > = ( |
< > = ) |
< > = ( - + ++ c g |
< > = ) - + ++ c g |
K |
then |
then |
< > = ( - + ++ c g |
then if end do := else while - + ++ < > = )cg |
M |
else |
else |
< > = ( - + ++ c g then else |
then if end do := else while - + -- < > = )cg |
Q |
while |
while |
while if begin do c |
while < > = - + -- c g |
O |
if begin do c |
if end do := c |
if begin do c |
if end do then := else while - + -- <>=)cg |
E |
- + ++ |
- + ++ |
- + ++ ( c g |
- + ++ ) c g |
F |
( c g |
) c g |
( c g |
) c g |
На основе этих множеств и правил грамматики Gпостроим матрицу предшествования грамматики:
Таблица 3.3
Матрица предшествования исходной грамматики
|
prog |
end. |
; |
or |
and |
not |
< |
> |
= |
( |
) |
if |
then |
else |
do |
while |
:= |
- |
+ |
++ |
c |
g |
begin |
end |
over |
prog |
- |
< |
< |
- |
- |
- |
- |
- |
- |
- |
- |
< |
- |
< |
- |
< |
- |
- |
- |
- |
< |
- |
< |
- |
- |
end. |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
> |
; |
- |
> |
> |
> |
- |
- |
- |
- |
- |
- |
> |
< |
- |
> |
< |
> |
< |
- |
- |
- |
< |
- |
< |
> |
- |
or |
- |
- |
- |
> |
< |
< |
< |
< |
< |
< |
> |
- |
- |
- |
- |
- |
- |
< |
< |
< |
< |
< |
- |
> |
- |
and |
- |
- |
- |
> |
> |
< |
- |
- |
- |
< |
> |
- |
- |
- |
- |
- |
- |
< |
< |
< |
< |
- |
- |
- |
- |
not |
- |
- |
- |
> |
> |
< |
< |
< |
< |
< |
> |
- |
- |
- |
- |
- |
- |
< |
< |
< |
< |
< |
- |
- |
- |
< |
- |
> |
> |
> |
> |
- |
- |
- |
- |
< |
> |
- |
> |
> |
> |
- |
- |
< |
< |
< |
< |
< |
- |
> |
- |
> |
- |
> |
> |
> |
> |
- |
- |
- |
- |
< |
> |
- |
> |
> |
> |
- |
- |
< |
< |
< |
< |
< |
- |
> |
- |
= |
- |
> |
> |
> |
> |
- |
- |
- |
- |
< |
> |
- |
> |
> |
> |
- |
- |
< |
< |
< |
< |
< |
- |
> |
- |
( |
- |
- |
- |
< |
< |
< |
< |
< |
< |
< |
= |
- |
- |
- |
- |
- |
- |
< |
< |
< |
< |
< |
- |
- |
- |
) |
- |
> |
> |
> |
> |
- |
> |
> |
> |
- |
> |
- |
> |
> |
- |
- |
- |
> |
> |
> |
- |
- |
- |
> |
- |
if |
- |
> |
> |
- |
- |
- |
< |
< |
< |
< |
- |
- |
< |
< |
- |
> |
- |
< |
< |
< |
< |
< |
- |
> |
- |
then |
- |
> |
> |
- |
- |
- |
- |
- |
- |
- |
- |
< |
- |
> |
< |
> |
< |
- |
- |
- |
< |
- |
< |
> |
- |
else |
- |
> |
> |
- |
- |
- |
- |
- |
- |
- |
- |
< |
- |
> |
< |
> |
< |
- |
- |
- |
< |
- |
< |
> |
- |
do |
- |
> |
> |
- |
- |
- |
- |
- |
- |
- |
< |
< |
- |
< |
- |
< |
< |
- |
- |
- |
< |
- |
< |
> |
- |
while |
- |
> |
> |
- |
- |
- |
< |
< |
< |
< |
- |
- |
- |
> |
< |
> |
- |
< |
< |
< |
< |
< |
- |
> |
- |
:= |
- |
> |
> |
- |
- |
- |
- |
- |
< |
- |
- |
- |
- |
> |
- |
> |
- |
< |
< |
< |
< |
< |
- |
> |
- |
- |
- |
> |
> |
> |
> |
- |
> |
> |
> |
< |
> |
- |
> |
> |
- |
> |
- |
> |
> |
> |
< |
< |
- |
> |
- |
+ |
- |
> |
> |
> |
> |
- |
> |
> |
> |
< |
> |
- |
> |
> |
- |
> |
- |
> |
> |
> |
< |
< |
- |
> |
- |
++ |
- |
> |
> |
> |
> |
- |
> |
> |
> |
< |
> |
- |
> |
> |
- |
> |
- |
> |
> |
> |
< |
< |
- |
> |
- |
c |
- |
> |
> |
> |
> |
- |
> |
> |
> |
- |
> |
- |
> |
> |
> |
> |
> |
> |
> |
> |
- |
- |
- |
> |
- |
g |
- |
> |
> |
> |
> |
- |
> |
> |
> |
- |
> |
- |
> |
> |
> |
> |
- |
> |
> |
> |
- |
- |
- |
> |
- |
begin |
- |
- |
< |
< |
- |
- |
- |
- |
- |
- |
- |
< |
- |
- |
< |
- |
< |
- |
- |
- |
< |
- |
< |
< |
- |
end |
- |
> |
> |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
> |
- |
> |
- |
- |
- |
- |
- |
- |
- |
> |
- |
bgn |
< |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |