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).
Ссылка на скачивание - внизу страницы.