- •Пояснительная записка
- •1 Формальная постановка задачи
- •2 Описание входного языка
- •2.1. Синтаксис входного языка
- •2.2. Семантика входного языка
- •2.2.1.Встроенные типы данных входного языка
- •2.2.2.Операции входного языка и их приоритет
- •2.2.3.Конструкции входного языка
- •3 Описание этапа лексического анализа
- •3.1 Описание типов лексем
- •3.2 Функции лексического анализатора
- •3.3 Тестирование лексического анализатора
- •4 Описание этапа синтаксического анализа
- •4.1 Исходная порождающая кс-грамматика
- •4.2 Разбиение исходной грамматики на подграмматики
- •4.3. Разработка дмп-процессора, порожденного исходной грамматикой
- •4.3.1 Алгоритм разбора для ll(1)-грамматик
- •4.3.2 Взаимодействие дмп-процессоров
- •4.3.3 Алгоритм работы дмп-процессора
- •4.3.4 Управляющие таблицы дмп-процессоров
- •4.3. Описание перевода во внутренний язык
- •4.3.1 Формат тетрады
- •4.3.2 Формат тетрад для представления основных операторов
- •4.3.3 Представление основных операторов(описанных в разделе семантики) с помощью тетрад
- •4.4.4 Взаимодействие атг с имеющимися таблицами лексического анализатора
- •4.4.5 Разработка атрибутной транслирующей грамматики
- •4.4.6 Описание используемых операционных символов
- •4.4.7 Атрибутный перевод дляLl(1)-грамматик
- •4.4.8 Атрибутный дмп-процессор
- •4.4.9 Тестовый пример
- •Список литературы
- •Приложение 1 Тестирование дмп-процессора
2 Описание входного языка
2.1. Синтаксис входного языка
Примечание: жирным шрифтом отмечены встроенные конструкции входного языка, а основным- конструкции БНФ.
< программа >::= void main()
{ {< объявление переменной>;}|
{< объявление вектора>;} |
<составной оператор> }
< составной оператор>::= <оператор>;
< оператор >::= [<метка>:]<непомеченный оператор>
< непомеченный оператор>::=< составной оператор >|< оператор присваивания >
< условный оператор присваивания>|< условный оператор >|
<оператор цикла с параметром>|<оператор безусловного перехода>|
< оператор ввода>|<оператор вывода>
< оператор присваивания >::=< переменная ><отношение присваивания>< выражение >
< отношение присваивания>::= + = | = | -= | *= | /=
< условный оператор присваивания>::=
(<логическое выражение>)?< выражение>:< выражение >
< условный оператор >::= if (<логическое выражение>) <составной оператор>
[else <составной оператор> ]
< оператор цикла с параметром>::=
for(<оператор присваивания>;<логическое выражение>;<оператор присваивания>)
<составной оператор>
<оператор безусловного перехода>::=goto<метка>
< оператор ввода>::= cin >><переменная>
< оператор вывода>::=cout <<<переменная>
< выражение>::=<выражение><аддитивная операция><слагаемое>|<слагаемое>|
< унарная операция >< слагаемое >| ~<вектор>
< слагаемое>::=<слагаемое><мультипликативная операция><множитель>|<множитель>
< множитель>::=<переменная>|(<выражение>)
< мультипликативная операция>::= *|/
< аддитивная операция>::=+|-
< логическое выражение>::=<конъюнкция>or<конъюнкция>|<отношение>
< конъюнкция>::=<логический множитель>and<логический множитель>
< логический множитель>::=<(<логическое выражение>)|
not<логический множитель>
< отношение> ::= <выражение> <операция отношения> <выражение>
< операция отношения>::=<|>|<=|>=|== | !=
< унарная операция>::= ++ |--
< объявление переменной> ::= <базовый тип> <идентификатор>
< объявление вектора>::=vector <идентификатор>[<размерность>]
< переменная> ::= <идентификатор>|< вектор>
< метка>::= <идентификатор>
< идентификатор> ::= <буква> {<буква>|<цифра>}
< буква> ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
< натуральная цифра>::=1|2|3|4|5|6|7|8|9
< цифра> ::= 0| <натуральная цифра>
< размерность>::=<натуральная цифра> {<цифра>}
< индекс>::= 0| <натуральная цифра>{<цифра>}
< базовый тип>::=int| float| bool
< вектор>::=
<идентификатор>|[< элемент вектора> {,< элемент вектора>}]
< элемент вектора> ::=
< идентификатор >[<индекс>] |< идентификатор> |< вещественное число>
< вещественное число>::=<натуральная цифра> {<цифра>}.{<цифра>}
2.2. Семантика входного языка
2.2.1.Встроенные типы данных входного языка
Базовые типы входного языка:
Имя типа |
Кол-во байт |
Описание хранимых данных |
int |
2 |
Целые числа в диапазоне от -32768 до 32767 |
float |
4 |
Вещественные числа в диапазоне 3.14E-38 до 3.14E+38. |
bool |
1 |
Логические переменные ЛОЖЬ(false) и ИСТИНА(true) |
Входной язык также поддерживает структурированный тип – vector -вектор с вещественными компонентами. Вектор представляется совокупностью компонент, каждая из которых, в свою очередь, представляется типом float.
При создании вектора необходимо указать его размерность, чтобы знать какой объем памяти отводить под его хранение.