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

Страницы работы

Содержание работы

Новосибирский государственный технический университет

Факультет Автоматики и Вычислительной Техники

Кафедра ВТ

syntAsRd

syntAsOneSA

Курсовая работа по дисциплине

Теория формальных языков

Выполнил:                 Горбатовский С.В.

Группа:                      АМ-209

Преподаватель:         Малявко А.А.

Дата сдачи:               29.12.05

Новосибирск 2005г.


Содержание

1.1. Описание языка. 3

1.2. Задание. 3

1.3. Пример правильной программы на учебном языке. 3

2. Лексический акцептор. 4

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

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

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


1.1. Описание языка

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

  • описания общей памяти;
  • определения вычислений;
  • описания связей между блоками.

Структура блока:

{<идентификатор блока> [{ <заголовок>}] <тело> [{<концевик> }] }

Оператора цикла в языке нет. Все прочие языковые конструкции выбираются студентом самостоятельно.

Согласно заданному варианту сконструированы лексика и синтаксис языка.

1.2. Задание

  1. Идентификатор блока: <имя блока>:<тип блока>. Имя блока:2 - буквенное
  2. Типы блоков: 1 – mem calc link
  3. Идентификация входов/выходов: 4
    <имя блока><.!><имя входа>
    <имя блока><.@><имя выхода>
  4. Связи (выход одного блока -> вход другого блока) определяются: 3 - В блоках описаний или в заголовках
  5. Оператор присваивания (E - выражение V – имя входа/выхода/локальное): 3 - let V E
  6. Условный оператор: 1 - if LE O [else O]

1.3. Пример правильной программы на учебном языке

{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}


2. Лексический акцептор

Описание лексики языка, представленное системой регулярных выражений:

Имя автомата

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

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

Действие

 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,"=");

Похожие материалы

Информация о работе