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

 Имя автомата 

 Имя группы слов 

 Регулярное выражение 

 Действие 

 Примечание 

 main

 startcomm

 [}]

 конец блока

 main

 startblok

 [{]

 stack.push(lexAcceptor);lexAcceptor=lexAcceptors[findAutomat("blok")];

 начало блока

 main

 comm

 other+

 ignoreLastWord=true;

 комментарии

 blok

 op2

 [*/]

 знаки операций умножения и деления

 blok

 otn

 ([><]|([>][=])|([<][=])|([=][=]))

 знаки отношений

 blok

 braket

 [()]

 круглые скобки

 blok

 UseLessWord

 [ \r\t\n]+

 ignoreLastWord=true;

 символы форматирования

 blok

 op1

 [-+]

 знаки операций сложения и вычитания

 blok

 Delimiter

 [;:,]

 специлаьные символы(разделители)

 blok

 const1

 [0-9]+[.]([0-9])+

 if(constHash.get(Lexem.textOfWord.toString()) == null){Lexem.wordIndex = constCnt++; constHash.put(Lexem.textOfWord.toString(),Lexem);}

 вещественная константа

 blok

 startzag

 [{]

 stack.push(lexAcceptor);lexAcceptor=lexAcceptors[findAutomat("blok")];

 открывающаяся фигурная скобка (начало заголовка или вложенного блока операторов)

 blok

 endblok

 [}]

 lexAcceptor=(fAutomat)stack.pop();

 закрывающаяся фигурная скобка(конец заголовка или вложенного блока операторов)

 blok

 in

 [_][i][_]

 идентификатор входа

 blok

 out

 [_][o][_]

 идентификатор выхода

 blok

 sv

 [-][>]

 оператор передачи

 blok

 ident

 [a-zA-Z][0-9a-zA-Z]*

 if(my.GTNB() == false){if(identHash.get(Lexem.textOfWord.toString()) == null && defHash.get(Lexem.textOfWord.toString()) == null){Lexem.wordIndex = my.GetCnt(); my.IncCnt(); identHash.put(Lexem.textOfWord.toString(),Lexem);}}

 идентификатор

 blok

 const2

 [0-9]+

 if(my.GTNB() == false){if(constHash.get(Lexem.textOfWord.toString()) == null){Lexem.wordIndex = constCnt++; constHash.put(Lexem.textOfWord.toString(),Lexem);}}

 целая константа

 blok

 nameblock

 [a-zA-Z0-9]+

 имя блока


Формальная грамматика

Для заданного варианта языка была разработана следующая грамматика.

Полученная грамматика относится к классу LL(1)-грамматик и, соответственно, является и LALR(1)-грамматикой.

Данная таблица отражает не окончательную версию разработанной грамматики.

Результат окончательной работы не удалось вставит в данную записку, поэтому он приводится в файле block_40.xml.

Но существенных изменений в самой грамматики в связи с внесением в неё действий по формированию пентад и семантическому анализу не внесено.

Синтаксис