 
											 
											 
											 
											 
											 
											 
					 
					Новосибирский государственный технический университет
Факультет Автоматики и Вычислительной Техники
Кафедра ВТ
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).
Ссылка на скачивание - внизу страницы.