Примеры результатов работы




Содержание

Содержание. 2

1. Цель работы. 3

2. Краткое описание учебного языка, варианты заданий. 3

3. Расшифровка цифр варианта задания. 3

4. Пример праграммы.. 4

5. Регулярные выражения. 6

6. Построить КА в форме матрицы: 6

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

8. Примеры результатов работы.. 8

Результат реализации лексического блока. 8

Результат реализации синтаксичекого блока. 9

Результат реализации генератора кода с переводом в язык абстрактной стековой машины.. 14

9. Список литературы.. 15


Цель работы.

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

2. Краткое описание учебного языка, варианты заданий.

Лексика, синтаксис и семантика учебного языка основаны на языках типа Java и C#.

Ключевые слова (выделены жирным шрифтом, например: число, строка, данные, …) должны быть нечувствительны к регистру. Обозначения:

[ ] – необязательная часть

… – часть, повторяющаяся произвольное количество раз

< > – описание конструкции

<Б>|<Ц>|<пБ>|<пЦ>|<пБЦ> – буква | цифра | последовательность букв | последовательность цифр | последовательность букв и/или цифр или пусто

<И> – <имя объекта>

<В> – <выражение>

<ЛВ> – <ЛогическоеВыражение>

<ОБ> – <ОператорИлиБлок> (<О> - одиночный оператор)

<К> –<константа>

3. Расшифровка цифр варианта задания.

a). Идентификаторы и константы:

Вариант:  
Идентификаторы <пБ><Ц>
Константы целые вещественные символьные 5-ричные yes/ no

b. Объявления примитивных типов (целое, вещественное, символьное, булево):

Вариант:  
  int[e[g[e[r]]]] float char bool

 

c. Оператор присваивания:

Вариант:  
  <И> = <В>;

 

d. Условный оператор:

Вариант:  
  by <ЛВ> do <ОБ> [otherwise <ОБ>]

 

e. Переключатель:

Вариант:  
  switch<В> {by <К>:<ОБ> …}

 

f.Оператор цикла:

Вариант:  
  for<И>from<К>to<К> [step<К>] <ОБ>

 

Пример праграммы

 

int ab2, d3; float c1;

bool xy4;

by(xy4==yes) do ab2 = 4;

otherwise c1=3;

switch (ab2) { by 1: d3=4 * (c1 + 3); by 2: c1 =(ab2 + 3) *3; }

for d3 from 0 to 3 ab2 = d3 * 1;

 

Интерпретация программы в код абстрактной стековой машины:

1)

int ab2, d3;

float c1;

bool xy4;

 

ab2 DW

d3 DW

c1 DD

xy4 DB

2)

switch (ab2)

{

by 1: d3= (c1 + 3)*4;

by 2: c1 =(ab2 + 3) *3;

}


RVALUE ab2

PUSH 1

=

GOTRUE CASE2

RVALUE ab2

PUSH 2

=

GOTRUE CASE1

GOTO OUT_SWITCH

LABEL CASE2

LVALUE d3

PUSH 4

RVALUE c1

PUSH 3

ADD

MULT

:=

GOTO OUT_SWITCH

LABEL CASE 1

LVALUE c1

RVALUE ab2

PUSH 3

ADD

PUSH 3

MULT

:=

GOTO OUT_SWITCH

LABEL OUT_SWITCH


3. by(xy4==yes) ab2 = 4; otherwise c1=3;


RVALUE xy4

PUSH yes

==

GOTRUE M1

GOTO M2

LABEL M2

LVALUE c1

PUSH 3

:=

GOTO M3

LABEL M1

LVALUE ab2

PUSH 4

:=

GOTO M3

LABEL M3


4)

for d3 from 0 to 3 ab2 = d3 + 1;


LVALUE d3

PUSH 0

:=

LABEL LAP

RVALUE d3

PUSH 3

<=

GOFALSE OUTFOR

LVALUE ab2

RVALUE d3

PUSH 1

MULT

:=

LVALUE

d3

RVALUE

d3

PUSH 1

ADD

:=

GOTO LAP

LABEL OUTFOR


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

<И>:= < пБ><Ц>

<Буква>:=a|b|c...|x|y|z

< пБ>:=(буква)­*

<Ц>:=0|1|2|3

<пЦ >:=(ц)*

<drop>:=.< пЦ >|e

<К>:=<знак>< пЦ ><drop>

<Знак >:=+|-|e

<Операнд>:=<ид>|< K>

<Сравнение>:= >|<|>=|<=|==|!=

<var>:=int | float|char|bool|

<by>:=by

<do>:=do

<othewise >:= othewise

<switch>:=switch

<for>:=for

<from>:=from

<to>:=to

<step>:=step

<oper>:=+|*|/|-

6. Построить КА в форме матрицы:

Входные символы: {var,id, by, crav,do, const, op,;,=, othewise, switch, (,), {, },:, for, from, to,step,+,*}

Состояния автомата:

· S0 – Поступление “var”

· S1 - Поступление “id”

· S2 - Поступление “, ”

· S3 - Поступление “;”

· S4 - Поступление ключевого слова “by”

· S5 - Поступление “crav”

· S6 - Поступление ключевого слова “do”

· S7 - Поступление “=”

· S8 - Поступление “(”

· S9 - Поступление “)”

· S10 - Поступление “+”

· S11 - Поступление “*”

· S12 - Поступление ключевого слова “otherwise”

· S13 - Поступление “{”

· S14 - Поступление “}”

· S15 - Поступление “const”

· S16 - Поступление “:”

· S17 - Поступление ключевого слова “for ”

· S18- Поступление ключевого слова “from”

· S19- Поступление ключевого слова “to ”

· S20 - Поступление ключевого слова “step”

· S21 - Поступление ключевого слова “switch ”

Построение КА в форме матрицы для описания лексического блока

 

 

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

T={ var,id, by, crav,do, const,;,=, othewise, switch, (,), {, },:, for, from, to,step,+,*}

P: V={Prog, telo, varop, ID, ifop, switchop, byop, forop, block, operand,B,opmult,som}

V 0 = <Prog>

 

1) <Prog> -> <varop><telo>

2)<telo> -> <condop><telo>

-><forop><telo>

-><switchop><telo>

->e

3)<varop> -> var <ID>;

->var <ID>; <varop>

4)<ID> -> id | id, <ID>

5)condop -> by (operan crav operan) do <block>

->by (operan crav operan) do <block> otherwise <block>

6)Switchop -> switch (B) {<byop>}

Byop -> by const: <block>

-> by const: <block> <byop>

7)Forop -> for id from const to const <block>| for id from const to const step const <block>

8)<Block> -> id = <B>;

->id = <B>; <block>

9)<В> -> <В> <операция сложения> < оператор умножения>

-> <оператор умножения>

10)<оператор умножения>

-> <оператор умножения> <операция умножения> < сомножитель>

-> <оператор умножения> –> <сомножитель>

11)<сомножитель> -> (<В>)

-> <операнд>

Примеры результатов работы



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-04-14 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: