Новосибирский государственный технический университет
Факультет Автоматики и Вычислительной Техники
Кафедра ВТ
syntAsRd
syntAsOneSA
Курсовая работа по дисциплине
Теория формальных языков
Выполнил: Горбатовский С.В.
Группа: АМ-209
Преподаватель: Малявко А.А.
Дата сдачи: 29.12.05
Новосибирск 2005г.
Содержание
1.1. Описание языка. 3
1.2. Задание. 3
1.3. Пример правильной программы на учебном языке. 3
2. Лексический акцептор. 4
3. Синтаксический акцептор. 6
4. Результаты работы акцептора. 7
5.Заключение. 8
Язык предназначен для программирования потоковых вычислений. Программа на таком языке состоит из совокупности блоков одного из назначений:
Структура блока:
{<идентификатор блока> [{ <заголовок>}] <тело> [{<концевик> }] }
Оператора цикла в языке нет. Все прочие языковые конструкции выбираются студентом самостоятельно.
Согласно заданному варианту сконструированы лексика и синтаксис языка.
{w:mem begin g,h,l,y end}
{q:link begin p.!l in tt.@y p.!u in tt.@y end}
{tt:calc begin let h w end}
{p:calc begin if(l<u) begin let h w end end}
{r:calc begin if(y<u) begin if(y<i) begin let j 0.5 end else begin let g y end end end}
Описание лексики языка, представленное системой регулярных выражений:
Имя автомата |
Имя группы слов |
Регулярное выражение |
Действие |
main |
op2 |
[*/] |
|
main |
op1 |
[+-] |
|
main |
f_w |
[.][!@] |
|
main |
ww |
[\r\t\n ]+ |
ignoreLastWord=true; |
main |
br |
[{}()] |
|
main |
pt |
[:;,=] |
|
main |
lo |
([!=<>][=])|[<>] |
|
main |
ident |
[a-zA-Z][a-zA-Z]* |
MyTable.t1.put((lexem)Lexem," "); |
main |
rc |
[1-9][0-9]* |
MyTable.t2.put((lexem)Lexem," "); |
main |
rc |
[0-9]*[.][0-9]+ |
MyTable.t2.put((lexem)Lexem," "); |
Текст сгенерированный WebTransLab’ом. В данном участке кода отображены состояния графа лексического акцептора. Т.е. каждая группа лексем – это состояние графа (может быть не одно).
public lexAnalyzer(textReader rdr){
faState state;
lexAcceptor=new fAutomat(17,rdr);
state=new faState(12);
state.setArc(1,"123456789");
state.setArc(2,"0");
state.setArc(3,".");
state.setArc(4,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
state.setArc(5,"=");
state.setArc(6,"<>");
state.setArc(7,"!");
state.setArc(8,":;,");
state.setArc(9,"{}()");
state.setArc(10,"\r\t\n ");
state.setArc(11,"+-");
state.setArc(12,"*/");
lexAcceptor.setState(0,state);
state=new faState(3);
state.setArc(-2,"");
state.setArc(1,"0123456789");
state.setArc(13,".");
lexAcceptor.setState(1,state);
state=new faState(2);
state.setArc(2,"0123456789");
state.setArc(13,".");
lexAcceptor.setState(2,state);
state=new faState(2);
state.setArc(14,"0123456789");
state.setArc(15,"!@");
lexAcceptor.setState(3,state);
state=new faState(2);
state.setArc(-3,"");
state.setArc(4,"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
lexAcceptor.setState(4,state);
state=new faState(2);
state.setArc(-4,"");
state.setArc(16,"=");
lexAcceptor.setState(5,state);
state=new faState(2);
state.setArc(-5,"");
state.setArc(16,"=");
lexAcceptor.setState(6,state);
state=new faState(1);
state.setArc(16,"=");
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.