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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

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

Кафедра ВТ

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

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.