Проектирование и разработка синтаксиса и лексики учебного языка, предназначенного для программирования потоковых вычислений. Проектирование трансляторов, страница 2

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);

 }


3. Синтаксический акцептор

Была выбрана к разработке  формальная грамматика класса 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

 U

 R

if_bl 

 if

 (

 arg

 lo

 arg

 )

 begin

 calc2_bl

 end

 elsE

elsE 

 else

 begin

 calc2_bl

 end

elsE 

 else

 V

 W

 op1

 S

arg 

 S

 (

 S

 )

 ident

 rc

 op2

 U


4. Результаты работы акцептора

Пример 1:

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

Пример 2:

В данной программе допущена синтаксическая ошибка, в последнем блоке вычислений пропущено одно служебное слово “end”.


5.Заключение

В процессе проектирования и разработки синтаксиса и лексики были использованы основные положения теории формальных языков. Были разработаны лексический акцептор, который создавался с помощью систем регулярных выражений и синтаксический акцептор нисходящего синтаксического разбора (LL(1) грамматика) .

Были получены основные навыки проектирования трансляторов.