Описание заданного множества конструкций языка программирования с помощью формальной грамматики

Входная грамматика в структурированной форме. Функции переходов символьного преобразователя. Работа лексического анализатора. Структуры данных, символы действия. Описание семантики перевода. Построение и программная реализация атрибутного преобразователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 03.07.2013
Размер файла 128,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

a15=a14; b14=b15;

<R3>Ѓ«a16 ЃЄb16 ::=$

b16= a16;

<NamesBool>Ѓ«a17 ЃЄb17 ::=<Id>ЃЄx11 {NewB}Ѓ«a18 ЃЄb18 Ѓ«x12 <R4>Ѓ«a19 ЃЄb19

b17=b19; a18=a17; a19=b18; x12=x11;

<NamesBool>Ѓ«a20 ЃЄb20 ::=<MasBool>Ѓ«a21 ЃЄb21 ЃЄx13 <R4>Ѓ«a22 ЃЄb22

b20=b22; a21=a20; a22=b21;

<R4>Ѓ«a23 ЃЄb23 ::=','<NamesBool>Ѓ«a24 ЃЄb24

a24=a23; b23=b24;

<R4>Ѓ«a25 ЃЄb25 ::=$

b25= a25;

<NamesChar>Ѓ«a26 ЃЄb26 ::=<Id>ЃЄx14 {NewC}Ѓ«a27 ЃЄb27 Ѓ«x15 <R5>Ѓ«a28 ЃЄb28

b26=b28; a27=a26; a28=b27; x15=x14;

<NamesChar>Ѓ«a29 ЃЄb29 ::=<MasChar>Ѓ«a30 ЃЄb30 ЃЄx16 <R5>Ѓ«a31 ЃЄb31

b29=b31; a30=a29; a31=b30;

<R5>Ѓ«a32 ЃЄb32 ::=','<NamesChar>Ѓ«a33 ЃЄb33

a33=a32; b32=b33;

<R5>Ѓ«a34 ЃЄb34 ::=$

b34= a34;

<Code>Ѓ«a35 ЃЄb35 ::='<ass>'<Perem>^t3 ','<Vyrazh>Ѓ«a36 ЃЄb36 ЃЄt4 {FAt=}Ѓ«t5 Ѓ«t6 Ѓ«t7 '</ass>'<R6>Ѓ«a37 ЃЄb37

a36=a35; a37=b36; b35=b37; (t5, t7)=t3; t6=t4;

<Perem>^t8 ::= <Id>^x17 {FUkTZId}Ѓ«x18 ЃЄt9

x18=x17; t8=t9;

<Perem>^t10 ::= <ElMas>^t11

t10=t11;

<Vyrazh>Ѓ«a38 ЃЄb38 ^t12 ::= <Const>^z1

b38=a38; t12=z1;

<Vyrazh>Ѓ«a39 ЃЄb39 ^t13 ::= <Simvol>^c1

b39=a39; t13=c1;

<Vyrazh>Ѓ«a40 ЃЄb40 ^t14 ::= <Perem>^t15

b40=a40; t14=t15;

<Vyrazh>Ѓ«a41 ЃЄb41 ^t16 ::= <Operation>Ѓ«a42 ЃЄb42 ^t17

a42=a41; b41=b42; t16=t17;

<Operation>Ѓ«a43 ЃЄb43 ^t18 ::= `<and>'<Operand>Ѓ«a44 ЃЄb44 ^t19 ','<Operand>Ѓ«a45 ЃЄb45 ^t20

{FAt&}Ѓ«t21 Ѓ«t22 Ѓ«t23 {NextZ}Ѓ«a46 ЃЄb46 `</and>'

a44=a43; a45=b44; b43=b46; (t18, t23, a46)=b45; t21=t19; t22=t20;

<Operation>Ѓ«a47 ЃЄb47 ^t24 ::= `<or>'<Operand>Ѓ«a48 ЃЄb48 ^t25 ','<Operand>Ѓ«a49 ЃЄb49 ^t26

{FAtV}Ѓ«t27 Ѓ«t28 Ѓ«t29 {NextZ}Ѓ«a50 ЃЄb50 `</or>'

a48=a47; a49=b48; b47=b50; (t24, t29, a50)=b49; t27=t25; t28=t26;

<Operation>Ѓ«a51 ЃЄb51 ^t30 ::=`<not>'<Operand>Ѓ«a52 ЃЄb52 ^t31{FAt!}Ѓ«t32 Ѓ«t33 Ѓ«t34{NextZ}Ѓ«a53 ЃЄb53 `</not>'

a52=a51; b51=b53; (t30, t34, a53)=b52; t32=t31; t33=NULL;

<Operand>Ѓ«a54 ЃЄb54 ^t35 ::= <Operation>Ѓ«a55 ЃЄb55 ^t36

a55=a54; b54=b55; t35=t36;

<Operand>Ѓ«a56 ЃЄb56 ^t37 ::= <Perem>^t38

b56=a56; t37=t38;

<Operand>Ѓ«a57 ЃЄb57 ^t39 ::= <Const>^z2

b57=a57; t39=z2;

<R6>Ѓ«a58 ЃЄb58 ::= <Code>Ѓ«a59 ЃЄb59

a59=a58; b58=b59;

<R6>Ѓ«a60 ЃЄb60 ::= $

b60=a60;

Для работы нам понадобятся следующие типы атрибутов:

1. Для идентификатора:

X - ссылка на идентификатор в таблице идентификаторов

2. Для числа:

ЃЄY - ссылка на число в таблице чисел

3. Для логической константы:

ЃЄZ - номер ячейки в таблице логических констант

4. Для символьной константы:

ЃЄС - номер ячейки в таблице символьных констант

4. Для ячеек таблицы значений

Ѓ«A - указатель на первую свободную ячейку до начала трансляции выражения

ЃЄB - указатель на первую свободную ячейку после завершения трансляции выражения

T - указатель на ячейку, в которой хранится (в которую необходимо записать) значение выражения (константы, переменной, элемента массива, результата операции)

4.3 Описание символов действия

{WrRM}Ѓ«x Ѓ«yЗапись размера массива в структуру идентификатора.

x- ссылка на идентификатор в ТИ (куда нужно записать)

y - ссылка на число в ТЧ (что нужно записать)

{FMB}Ѓ«a ^b Ѓ«xФормирование массива Boolean

{FMC}Ѓ«a ^b Ѓ«xФормирование массива Char

a - указатель на первую свободную ячейку ТЗ, откуда можно начинать формирование b - новый указатель на первую свободную ячейку ТЗ

x - ссылка на идентификатор в ТИ (в структуре которого находится информация о массиве)

Проверяет количество элементов на допустимое значение, если значение допустимо, то формирует в ТЗ массив.

{FUkTZEM}Ѓ«x Ѓ«y ^tФормирование указателя на ячейку ТЗ, в которой хранится значение элемента массива

x - ссылка на идентификатор массива в ТИ

y - ссылка на число в ТЧ (номер элемента в массиве)

t - сформированный указатель на ячейку ТЗ

{NewB}Ѓ«a ^b Ѓ«xВыделение памяти под переменную типа Boolean

{NewC}Ѓ«a ^b Ѓ«xВыделение памяти под переменную типа Char

a - указатель на первую свободную ячейку ТЗ (выделяемая ячейка)

b - новый указатель на первую свободную ячейку ТЗ

x - ссылка на идентификатор переменной в ТИ, для которой необходимо выделить память

Устанавливает указатель на ТЗ в структуре идентификатора.

{FUkTZId}Ѓ«x ^tФормирование указателя на ячейку ТЗ, в которой хранится значение переменной

x - ссылка на идентификатор переменной в ТИ

t - сформированный указатель на ячейку ТЗ

{FAt=}Ѓ«t1 Ѓ«t2 Ѓ«t3Формирование атома (=, Операнд1, Операнд2, Результат)

t1 - указатель на ячейку памяти, в которой хранится значение Операнд1

t2 - указатель на ячейку памяти, в которой хранится значение Операнд2

t3 - указатель на ячейку памяти, в которую нужно записать Результат

Проверяет по значению поля TypeZ структуры ячейка памяти типы

Операнд1 и Операнд2. Если они совпадают, то формирует атом(=, Операнд1, Операнд2, Операнд1).

{FAt&}Ѓ«t1 Ѓ«t2 Ѓ«t3Формирование атома (&, Операнд1, Операнд2, Результат)

t1 - указатель на ячейку памяти, в которой хранится значение Операнд1

t2 - указатель на ячейку памяти, в которой хранится значение Операнд2

t3 - указатель на ячейку памяти, в которую нужно записать Результат

Проверяет по значению поля TypeZ структуры ячейка памяти типы

Операнд1 и Операнд2. Если они совпадают и имеют значение TBool, то формирует атом(=, Операнд1, Операнд2, Результат).

{FAtV}Ѓ«t1 Ѓ«t2 Ѓ«t3Формирование атома (&, Операнд1, Операнд2, Результат)

t1 - указатель на ячейку памяти, в которой хранится значение Операнд1

t2 - указатель на ячейку памяти, в которой хранится значение Операнд2

t3 - указатель на ячейку памяти, в которую нужно записать Результат

Проверяет по значению поля TypeZ структуры ячейка памяти типы

Операнд1 и Операнд2. Если они совпадают и имеют значение TBool, то формирует атом(V, Операнд1, Операнд2, Результат).

{FAt!}Ѓ«t1 Ѓ«t2 Ѓ«t3Формирование атома (!, Операнд, NULL, Результат)

t1 - указатель на ячейку памяти, в которой хранится значение Операнд

t2 - NULL (унарная операция)

t3 - указатель на ячейку памяти, в которую нужно записать Результат

Проверяет по значению поля TypeZ структуры ячейка памяти тип

Операнд. Если он имеет значение TBool, то формирует атом(!, Операнд, NULL, Операнд).

{NextZ}Ѓ«a ^bПолучение указателя на очередную свободную ячейку ТЗ

а - указатель на ячейку ТЗ

b - сформированный указатель на очередную свободную ячейку ТЗ

грамматика лексический атрибутный преобразователь

5. Атрибутный преобразователь

5.1 Построение функций переходов атрибутного преобразователя

Порядок построения АТ - преобразователя по заданной LАТ-грамматике в форме простого присваивания выглядит следующим образом:

Удалим из правил заданной LАТ-грамматики все атрибуты и правила их вычисления. В результате получим транслирующую грамматику.

Для полученной транслирующей грамматики построим преобразователь. Учитывая, что такой преобразователь в дальнейшем должен быть использован для работы с атрибутами, внесем следующие изменения в правила его построения:

а) чтобы первая команда преобразователя могла установить начальные значения последующих атрибутов начального символа грамматики, в качестве начальной примем конфигурацию следующего вида:

(s0 , <заданная цепочка>, h0 ),

б) откажемся от совмещения команд для правил вида <А> b? , где b является терминалом, имеющим атрибут, и ? - некоторая цепочка из терминальных и нетерминальных символов, используя вместо команды

f(s0, b,<A>) = (s0, aR)

две команды

*(s0, b, <A>) = (s0, aRb)

(s0, b, b) = (s0, $),

поскольку при выполнении одной команды терминальный символ и, следовательно, его атрибут не записываются в магазин, что делает невозможным формирование указателя для правила вычисления атрибута, в котором используется атрибут терминала b.

Функции переходов атрибутного преобразователя :

*( S, <char>, [] ) = ( S, []<I>, $ )

*( S, <boolean>, [] ) = ( S, []<I>, $ )

( S, "<arr>" , <masbool> ) = ( S, "</arr>" "{FMB}" "{WrRM}" "<chislo>" "," "<id>" , $ )

( S, "<arr>" , <maschar> ) = ( S, "</arr>" "{FMC}" "{WrRM}" "<chislo>" "," "<id>" , $ )

( S, "<earr>" , <elmas> ) = ( S, "</earr>" "{FUkTZEM}" "<chislo>" "," "<id>" , $ )

( S, "<boolean>" , <vars> ) = ( S, <r3> "</boolean>" <namesbool> , $ )

( S, "<char>" , <vars> ) = ( S, <r3> "</char>" <nameschar> , $ )

*( S, "<id>" , <namesbool> ) = ( S, <r4> "{NewB}" "<id>", $ )

( S, "," , <r4> ) = ( S, <namesbool> , $ )

*( S, "<id>" , <nameschar> ) = ( S, <r5> "{NewC}" "<id>", $ )

( S, "," , <r5> ) = ( S, <nameschar> , $ )

( S, "<ass>" , <code> ) = ( S, <r6> "</ass>" "{FAt=}" <vyrazh> "," <perem> , $ )

*( S, "<id>" , <perem> ) = ( S, "{FUkTZId}" "<id>", $ )

*( S, "<const>" , <vyrazh> ) = ( S, "<const>" , $ )

*( S, "<simvol>" , <vyrazh> ) = ( S, "<simvol>" , $ )

( S, "<and>" , <operation> ) = ( S, "</and>" "{NextZ}" "{FAt&}" <operand> "," <operand> , $ )

( S, "<or>" , <operation> ) = ( S, "</or>" "{NextZ}" "{FAtV}" <operand> "," <operand> , $ )

( S, "<not>" , <operation> ) = ( S, "</not>" "{NextZ}" "{FAt!} " <operand> , $ )

*( S, "<const>" , <operand> ) = ( S, "<const>" , $ )

*( S, "<boolean>" , <i> ) = ( S, <code> <vars> , $ )

*( S, "<char>" , <i> ) = ( S, <code> <vars> , $ )

*( S, "<boolean>" , <r3> ) = ( S, <vars> , $ )

*( S, "<char>" , <r3> ) = ( S, <vars> , $ )

*( S, "<arr>" , <namesbool> ) = ( S, <r4> <masbool> , $ )

*( S, "<arr>" , <nameschar> ) = ( S, <r5> <maschar> , $ )

*( S, "<earr>" , <perem> ) = ( S, <elmas> , $ )

*( S, "<id>" , <vyrazh> ) = ( S, <perem> , $ )

*( S, "<earr>" , <vyrazh> ) = ( S, <perem> , $ )

*( S, "<and>" , <vyrazh> ) = ( S, <operation> , $ )

*( S, "<or>" , <vyrazh> ) = ( S, <operation> , $ )

*( S, "<not>" , <vyrazh> ) = ( S, <operation> , $ )

*( S, "<and>" , <operand> ) = ( S, <operation> , $ )

*( S, "<or>" , <operand> ) = ( S, <operation> , $ )

*( S, "<not>" , <operand> ) = ( S, <operation> , $ )

*( S, "<id>" , <operand> ) = ( S, <perem> , $ )

*( S, "<earr>" , <operand> ) = ( S, <perem> , $ )

*( S, "<ass>" , <r6> ) = ( S, <code> , $ )

*( S, "<ass>" , <r3> ) = ( S, $ , $ )

*( S, "</boolean>" , <r4> ) = ( S, $ , $ )

*( S, "</char>" , <r5> ) = ( S, $ , $ )

*( S, -|, <r6> ) = ( S, $ , $ )

( S, "," , "," ) = ( S , $ , $ )

( S, "<id>" , "<id>" ) = ( S , $ , $ )

( S, "<chislo>" , "<chislo>" ) = ( S , $ , $ )

( S, "</ass>" , "</ass>" ) = ( S , $ , $ )

( S, "</arr>" , "</arr>" ) = ( S , $ , $ )

( S, "</earr>", "</earr>" ) = ( S , $ , $ )

( S, "</boolean>" , "</boolean>" ) = ( S , $ , $ )

( S, "</char>" , "</char>" ) = ( S , $ , $ )

( S, "</and>" , "</and>" ) = ( S , $ , $ )

( S, "</or>" , "</or>" ) = ( S , $ , $ )

( S, "</not>" , "</not>" ) = ( S , $ , $ )

*( S, "{WrRM}", "{WrRM}") = (S, $, $ )

*( S, "{FMB}", "{FMB}") = (S, $, $ )

*( S, "{FMC}", "{FMC}") = (S, $, $ )

*( S, "{NewB}", "{NewB}") = (S, $, $ )

*( S, "{NewC}", "{NewC}") = (S, $, )

*( S, "{FUkTZEM}", "{FUkTZEM}") = (S, $, $ )

*( S, "{FUkTZId}", "{FUkTZId}") = (S, $, $ )

*( S, "{FAt=}", "{FAt=}") = (S, $, $ )

*( S, "{FAt&}", "{FAt&}") = (S, $, $ )

*( S, "{FAtV}", "{FAtV}") = (S, $, $ )

*( S, "{FAt!}", "{FAt!} ") = (S, $, $ )

*( S, "{NextZ}", "{NextZ}") = (S, $, $ )

( S, -|, [] ) = ( S1, $, $ )

5.2 Построение инструкций атрибутного преобразователя

Для каждого правила заданной атрибутной грамматики необходимо построить инструкции, выполняемые при записи правила в магазин. Затем нужно все инструкции пронумеровать, обозначив их # N.

Инструкции атрибутного преобразователя :

Инструкция #1

{

Записать в магазин цепочку

b1 a1 <I>

stack [sp-1]:=a// a - начальное значение атрибута а1 (указатель на первую своб. ячеку ТЗ)

}

Инструкция #2

{

Удалить символ из магазина

Записать в магазин цепочку

b3 a3 <Code> b2 a2 <Vars>

stack [sp-1]:=-5

stack [sp-2]:=-2

stack [sp-5]:=-2

}

Инструкция #3

{

Удалить символ из магазина

Записать в магазин цепочку

`</arr>' x4 b5 a5 {FMB} y2 x3 {WrRM} y1 <Chislo> `,' x2 <Id>

stack [sp-1]:=-5

stack [sp-4]:=-3

stack [sp-6]:=-5

stack [sp-9]:=-3

stack [sp-10]:=-3

stack [sp-11]:=-3

}

Инструкция #4

{

Удалить символ из магазина

Записать в магазин цепочку

`</arr>' x8 b7 a7 {FMC} y4 x7 {WrRM} y3 <Chislo> `,' x6 <Id>

stack [sp-1]:=-5

stack [sp-4]:=-3

stack [sp-6]:=-5

stack [sp-9]:=-3

stack [sp-10]:=-3

stack [sp-11]:=-3

}

Инструкция #5

{

Удалить символ из магазина

Записать в магазин цепочку

`</earr>' t2 y6 x10 {FUkTZEM} y5 <Chislo> `,' x9 <Id>

stack [sp-1]:=-4

stack [sp-3]:=-3

stack [sp-7]:=-7}

Инструкция #6

{

Удалить символ из магазина

Записать в магазин цепочку

b10 a10 <R3> `</boolean>' b9 a9 <NamesBool>

stack [sp-1]:=-6

stack [sp-2]:=-3

stack [sp-6]:=-2

}

Инструкция #7

{

Удалить символ из магазина

Записать в магазин цепочку

b13 a13 <R3> `</char>' b12 a12 <NamesChar>

stack [sp-1]:=-6

stack [sp-2]:=-3

stack [sp-6]:=-2

}

Инструкция #8

{

Удалить символ из магазина

Записать в магазин цепочку

b19 a19 <R4> x12 b18 a18 {NewB} x11 <Id>

stack [sp-1]:=-4

stack [sp-3]:=-6

stack [sp-4]:=-3

stack [sp-8]:=-2

}

Инструкция #9

{

Удалить символ из магазина

Записать в магазин цепочку

b24 a24 <NamesBool>

stack [sp-1]:=-2

stack [sp-2]:=-2

}

Инструкция #10

{

Удалить символ из магазина

Записать в магазин цепочку

b28 a28 <R5> x15 b27 a27 {NewC} x14 <Id>

stack [sp-1]:=-4

stack [sp-3]:=-6

stack [sp-4]:=-3

stack [sp-8]:=-2

}

Инструкция #11

{

Удалить символ из магазина

Записать в магазин цепочку

b33 a33 <NamesChar>

stack [sp-1]:=-2

stack [sp-2]:=-2

}

Инструкция #12

{

Удалить символ из магазина

Записать в магазин цепочку

b37 a37 <R6> `</ass>' t7 t6 t5 {FAt=} t4 b36 a36 <Vyrazh> `,' t3 <Perem>

stack [sp-1]:=-7

stack [sp-4]:=-11

stack [sp-5]:=-8

stack [sp-6]:=-3

stack [sp-8]:=-2

stack [sp-14]:=-2

}

Инструкция #13

{

Удалить символ из магазина

Записать в магазин цепочку

t9 x18 {FUkTZId} x17 <Id>

stack [sp-1]:=-2

stack [sp-4]:=-1

}

Инструкция #14

{

Удалить символ из магазина

Записать в магазин цепочку

z1 <Const>

stack [sp-1]:=-3

stack [sp-2]:=-1

}

Инструкция #15

{

Удалить символ из магазина

Записать в магазин цепочку

c1 <Simvol>

stack [sp-1]:=-3

stack [sp-2]:=-1

}

Инструкция #16

{

Удалить символ из магазина

Записать в магазин цепочку

`</and>' b46 a46 {NextZ} t23 t22 t21 {FAt&} t20 b45 a45 <Operand> `,' t19 b44 a44 <Operand>

stack [sp-1]:=-16

stack [sp-2]:=-4

stack [sp-3]:=-7

stack [sp-7]:=-5

stack [sp-8]:=-3

stack [sp-12]:=-2

stack [sp-14]:=-5

stack [sp-15]:=-3

}

Инструкция #17

{

Удалить символ из магазина

Записать в магазин цепочку

`</or>' b50 a50 {NextZ} t29 t28 t27 {FAtV} t26 b49 a49 <Operand> `,' t25 b48 a48 <Operand>

stack [sp-1]:=-16

stack [sp-2]:=-4

stack [sp-3]:=-7

stack [sp-7]:=-5

stack [sp-8]:=-3

stack [sp-12]:=-2

stack [sp-14]:=-5

stack [sp-15]:=-3

}

Инструкция #18

{

Удалить символ из магазина

Записать в магазин цепочку

`</not>' b53 a53 {NextZ} t34 t33 t32 {FAt!} t31 b52 a52 <Operand>

stack [sp-1]:=-11

stack [sp-2]:=-5

stack [sp-3]:=-2

stack [sp-6]:=Null

stack [sp-7]:=-2

stack [sp-9]:=-5

stack [sp-10]:=-2

}

Инструкция #19

{

Удалить символ из магазина

Записать в магазин цепочку

z2 <Const>

stack [sp-1]:=-3

stack [sp-2]:=-1

}

Инструкция #20

{

Удалить символ из магазина

Записать в магазин цепочку

b15 a15 <Vars>

stack [sp-1]:=-2

stack [sp-2]:=-2

}

Инструкция #21

{

Удалить символ из магазина

Записать в магазин цепочку

b22 a22 <R4> x13 b21 a21 <MasBool>

stack [sp-1]:=-6

stack [sp-2]:=-3

stack [sp-6]:=-2

}

Инструкция #22

{

Удалить символ из магазина

Записать в магазин цепочку

b31 a31 <R5> x16 b30 a30 <MasChar>

stack [sp-1]:=-6

stack [sp-2]:=-3

stack [sp-6]:=-2

}

Инструкция #23

{

Удалить символ из магазина

Записать в магазин цепочку

t11 <ElMas>

stack [sp-1]:=-1

}

Инструкция #24

{

Удалить символ из магазина

Записать в магазин цепочку

t15 <Perem>

stack [sp-1]:=-3

stack [sp-2]:=-1}

Инструкция #25

{

Удалить символ из магазина

Записать в магазин цепочку

t17 b42 a42 <Operation>

stack [sp-1]:=-3

stack [sp-2]:=-3

stack [sp-3]:=-3}

Инструкция #26

{

Удалить символ из магазина

Записать в магазин цепочку

t36 b55 a55 <Operation>

stack [sp-1]:=-3

stack [sp-2]:=-3

stack [sp-3]:=-3

}

Инструкция #27

{

Удалить символ из магазина

Записать в магазин цепочку

t38 <Perem>

stack [sp-1]:=-3

stack [sp-2]:=-1

}

Инструкция #28

{

Удалить символ из магазина

Записать в магазин цепочку

b59 a59 <Code>

stack [sp-1]:=-2

stack [sp-2]:=-2

}

Инструкция #29

{

Удалить символ из магазина

stack [sp]:=-1

}

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

Для этого необходимо заменить цепочки, записываемые в магазин символьным преобразователем, инструкциями атрибутного преобразователя:

(S, <входной символ>, <вершина магазина>) = (S, <номер выполняемой инструкции>)

Функции переходов атрибутного преобразователя :

*( S, <char>, [] ) = ( S, #1 )

*( S, <boolean>, [] ) = ( S, #1 )

( S, "<arr>" , <masbool> ) = ( S, #3 )

( S, "<arr>" , <maschar> ) = ( S,#4 )

( S, "<earr>" , <elmas> ) = ( S, #5 )

( S, "<boolean>" , <vars> ) = ( S, #6 )

( S, "<char>" , <vars> ) = ( S, #7 )

*( S, "<id>" , <namesbool> ) = ( S, #8 )

( S, "," , <r4> ) = ( S, #9 )

*( S, "<id>" , <nameschar> ) = ( S, #10 )

( S, "," , <r5> ) = ( S, #11 )

( S, "<ass>" , <code> ) = ( S, #12 )

*( S, "<id>" , <perem> ) = ( S, #13 )

*( S, "<const>" , <vyrazh> ) = ( S, #14 )

*( S, "<simvol>" , <vyrazh> ) = ( S, #15 )

( S, "<and>" , <operation> ) = ( S, #16 )

( S, "<or>" , <operation> ) = ( S, #17 )

( S, "<not>" , <operation> ) = ( S, #18 )

*( S, "<const>" , <operand> ) = ( S, #19 )

*( S, "<boolean>" , <i> ) = ( S, #2 )

*( S, "<char>" , <i> ) = ( S, #2 )

*( S, "<boolean>" , <r3> ) = (S, #20 )

*( S, "<char>" , <r3> ) = (S, #20 )

*( S, "<arr>" , <namesbool> ) = ( S, #21 )

*( S, "<arr>" , <nameschar> ) = ( S, #22 )

*( S, "<earr>" , <perem> ) = ( S, #23 )

*( S, "<id>" , <vyrazh> ) = ( S, #24 )

*( S, "<earr>" , <vyrazh> ) = ( S, #24 )

*( S, "<and>" , <vyrazh> ) = ( S, #25 )

*( S, "<or>" , <vyrazh> ) = ( S, #25 )

*( S, "<not>" , <vyrazh> ) = ( S, #25 )

*( S, "<and>" , <operand> ) = ( S, #26 )

*( S, "<or>" , <operand> ) = ( S, #26 )

*( S, "<not>" , <operand> ) = ( S, #26 )

*( S, "<id>" , <operand> ) = ( S, #27 )

*( S, "<earr>" , <operand> ) = ( S, #27 )

*( S, "<ass>" , <r6> ) = ( S, <code> , #28 )

*( S, "<ass>" , <r3> ) = ( S, #29 )

*( S, "</boolean>" , <r4> ) = ( S, #29 )

*( S, "</char>" , <r5> ) = ( S, #29 )

*( S, -|, <r6> ) = ( S, #29 )

( S, "," , "," ) = ( S , $ , $ )

( S, "<id>" , "<id>" ) = ( S , $ , $ )

( S, "<chislo>" , "<chislo>" ) = ( S , $ , $ )

( S, "</ass>" , "</ass>" ) = ( S , $ , $ )

( S, "</arr>" , "</arr>" ) = ( S , $ , $ )

( S, "</earr>", "</earr>" ) = ( S , $ , $ )

( S, "</boolean>" , "</boolean>" ) = ( S , $ , $ )

( S, "</char>" , "</char>" ) = ( S , $ , $ )

( S, "</and>" , "</and>" ) = ( S , $ , $ )

( S, "</or>" , "</or>" ) = ( S , $ , $ )

( S, "</not>" , "</not>" ) = ( S , $ , $ )

*( S, "{WrRM}", "{WrRM}") = (S, $, $ )

*( S, "{FMB}", "{FMB}") = (S, $, $ )

*( S, "{FMC}", "{FMC}") = (S, $, $ )

*( S, "{NewB}", "{NewB}") = (S, $, $ )

*( S, "{NewC}", "{NewC}") = (S, $, )

*( S, "{FUkTZEM}", "{FUkTZEM}") = (S, $, $ )

*( S, "{FUkTZId}", "{FUkTZId}") = (S, $, $ )

*( S, "{FAt=}", "{FAt=}") = (S, $, $ )

*( S, "{FAt&}", "{FAt&}") = (S, $, $ )

*( S, "{FAtV}", "{FAtV}") = (S, $, $ )

*( S, "{FAt!}", "{FAt!} ") = (S, $, $ )

*( S, "{NextZ}", "{NextZ}") = (S, $, $ )

( S, -|, [] ) = ( S1, $, $ )

При таком представлении команд в цепочках отсутствуют выходные символы. Предполагается, что формирование выходной цепочки должно выполняться символами действия.

Список используемой литературы

1. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение / Учебник для вузов. - СПб.: Питер, 2001.

2. Ахо А., Сети Р., Ульман Д. Компиляторы: принципы, технологии и инструменты. - М., Изд. дом «Вильямс», 2001.

3. Пратт Т., Зелковиц М. Языки программирования: реализация и разработка. - СПб.: Питер, 2001.

4. Рейуорд-Смит В.Дж. Теория формальных языков. Вводный курс. - М.: Радио и связь, 1988.

5. Хантер Р. Проектирование и конструирование компиляторов. - М.: Финансы и статистика, 1984.

6. Льюис Ф., Розенкранц Д., Стирнз Р. Теоретические основы проектирования компиляторов. - М., Мир, 1979.

7. Грис Д. Конструирование компиляторов для цифровых вычислительных машин. - М., Мир, 1985.

Размещено на Allbest.ru


Подобные документы

  • Описание синтаксиса и семантики входного языка. Описание типов лексем, определение их синтаксиса. Построение диаграммы лексического анализатора, а также его таблицы, тестирование. Построение КС-грамматики входного языка. Описание промежуточного языка.

    курсовая работа [83,0 K], добавлен 23.01.2014

  • Изучение алгоритма рекурсивного спуска и системы построения грамматики с помощью лексического анализатора Lex. Написание программы интерпретатора языка разметки HTML. Проверка входной последовательности на корректность входа как общая функция программы.

    контрольная работа [226,7 K], добавлен 25.12.2012

  • Понятие синтаксического анализа. Программный продукт для обработки данных строкового типа. Построение сканера текстов с использованием утилиты flex, синтаксического анализатора с помощью утилиты bison. Грамматика языка программирования обработки строк.

    курсовая работа [261,7 K], добавлен 29.10.2012

  • Разработка анализирующей части компилятора для выполнения проверки исходной программы на соответствие грамматике языка, правилам семантики и построения внутреннего представления. Описание анализаторов: лексического, синтаксического и семантического.

    контрольная работа [704,9 K], добавлен 01.02.2013

  • Общая характеристика и оценка возможностей языка программирования си-шарп, его сходные и отличительные черты от С++ и Java. Разработка с помощью данного языка программирования лексического и синтаксического анализатора. Составление таблиц разбора.

    курсовая работа [111,6 K], добавлен 11.06.2010

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

    курсовая работа [697,2 K], добавлен 06.01.2013

  • Функции компилятора как системной обрабатывающей программы. Этапы компиляции: анализ и синтез. Разработка лексического анализатора. Алгоритм и программа лексического анализа. Реализация двухфазного компилятора. Описание логической структуры программы.

    курсовая работа [310,4 K], добавлен 26.03.2010

  • Описание процедуры выбора структуры хранения данных. Программная реализация одномерного неоднородного массива. Представление бинарного дерева в виде динамической структуры данных. Изучение способов поиска в упорядоченном дереве. Содержание базы данных.

    практическая работа [850,0 K], добавлен 16.04.2015

  • Сведение недетерминированного конечного автомата к детерминированному. Построение минимального детерминированного автомата из праволинейной грамматики двумя различными способами: с помощью сетей Петри и с помощью таблиц. Описание контрольного примера.

    курсовая работа [903,9 K], добавлен 14.07.2012

  • Теоретическое исследование вопроса и практическое применение. Общие сведения о графах. Алгоритм Дейкстры. Особенности работы в среде. Программная реализация. Описание алгоритма и структуры программы. Описание программных средств. Текст программы.

    курсовая работа [1,0 M], добавлен 27.11.2007

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.