lexAcceptor.setState(7,state);
state=new faState(1);
state.setArc(-4,"");
lexAcceptor.setState(8,state);
state=new faState(1);
state.setArc(-6,"");
lexAcceptor.setState(9,state);
state=new faState(2);
state.setArc(-7,"");
state.setArc(10,"\r\t\n ");
lexAcceptor.setState(10,state);
state=new faState(1);
state.setArc(-8,"");
lexAcceptor.setState(11,state);
state=new faState(1);
state.setArc(-9,"");
lexAcceptor.setState(12,state);
state=new faState(1);
state.setArc(14,"0123456789");
lexAcceptor.setState(13,state);
state=new faState(2);
state.setArc(-2,"");
state.setArc(14,"0123456789");
lexAcceptor.setState(14,state);
state=new faState(1);
state.setArc(-10,"");
lexAcceptor.setState(15,state);
state=new faState(1);
state.setArc(-5,"");
lexAcceptor.setState(16,state);
}
Была выбрана к разработке формальная грамматика класса LL(1), определяющая синтаксис заданного языка. Используя пакет WebTransLab, построил автоматную реализацию нисходящего синтаксического акцептора.
|
Левая часть |
Правая часть |
|||||||||
|
prg |
correct_set_bl |
|||||||||
|
correct_set_bl |
bl |
add |
||||||||
|
bl |
{ |
head |
ident |
: |
type_bl |
} |
||||
|
add |
bl |
add |
||||||||
|
add |
||||||||||
|
head |
{ |
link_bl |
} |
|||||||
|
head |
||||||||||
|
type_bl |
mem |
begin |
mem_bl |
end |
||||||
|
type_bl |
calc |
begin |
calc2_bl |
end |
||||||
|
type_bl |
link |
begin |
link_bl |
end |
||||||
|
link_bl |
body_link_bl |
add_link_bl |
||||||||
|
mem_bl |
ident |
add_mem_bl |
||||||||
|
calc2_bl |
oper_bl |
|||||||||
|
body_link_bl |
body_link_bl_from |
in |
body_link_bl_where |
|||||||
|
add_link_bl |
body_link_bl |
add_link_bl |
||||||||
|
add_link_bl |
||||||||||
|
add_mem_bl |
, |
ident |
add_mem_bl |
|||||||
|
add_mem_bl |
||||||||||
|
add_mem_bl |
= |
rc |
add_mem_bl |
|||||||
|
oper_bl |
op |
add_oper_bl |
||||||||
|
body_link_bl_from |
ident |
.! |
ident |
|||||||
|
body_link_bl_where |
ident |
.@ |
ident |
|||||||
|
op |
put_bl |
|||||||||
|
op |
if_bl |
|||||||||
|
add_oper_bl |
op |
add_oper_bl |
||||||||
|
add_oper_bl |
||||||||||
|
put_bl |
let |
ident |
S |
|||||||
|
S |
U |
R |
||||||||
|
if_bl |
if |
( |
arg |
lo |
arg |
) |
begin |
calc2_bl |
end |
elsE |
|
elsE |
else |
begin |
calc2_bl |
end |
||||||
|
elsE |
|
|||||||||
|
U |
V |
W |
||||||||
|
R |
op1 |
S |
||||||||
|
R |
||||||||||
|
arg |
S |
|||||||||
|
V |
( |
S |
) |
|||||||
|
V |
ident |
|||||||||
|
V |
rc |
|||||||||
|
W |
op2 |
U |
||||||||
|
W |
||||||||||
Пример 1:

Текст программы, с точки зрения лексического и синтаксического акцептора – правильный.
Пример 2:

В данной программе допущена синтаксическая ошибка, в последнем блоке вычислений пропущено одно служебное слово “end”.
В процессе проектирования и разработки синтаксиса и лексики были использованы основные положения теории формальных языков. Были разработаны лексический акцептор, который создавался с помощью систем регулярных выражений и синтаксический акцептор нисходящего синтаксического разбора (LL(1) грамматика) .
Были получены основные навыки проектирования трансляторов.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.