Описание заданного множества конструкций языка программирования с помощью формальной грамматики
Входная грамматика в структурированной форме. Функции переходов символьного преобразователя. Работа лексического анализатора. Структуры данных, символы действия. Описание семантики перевода. Построение и программная реализация атрибутного преобразователя.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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