- •Пояснительная записка к курсовой работе (вар16)
- •2008 Оглавление
- •Задание
- •Описание синтаксиса языка в форме Бэкуса-Наура Teрминальные символы:
- •Программа
- •Оператор ввода
- •Оператор вывода
- •Оператор безусловного перехода
- •Оператор условного перехода
- •Оператор Цикла
- •Арифметические выражения
- •Переменная
- •Оператор присваивания
- •Объявления переменных, констант и типов
- •Операции входного языка и их приоритет
- •Перечисление лексем
- •Синтаксический анализ и перевод во внутреннюю форму
- •Кс-грамматика входного языка
- •Основная грамматика
- •Подграмматика составного оператора
- •Подграмматика оператора
- •Подграмматика оператора_вывода
- •Подграмматика для операторов
- •Подграмматика объявлений
- •Подграмматика объявления констант
- •Подграмматика арифметических выражений
- •Подграмматика переменной
- •Описание промежуточного языка.
- •Спецификация тетрад
- •Описание перевода (постфиксная s – атрибутная транслирующая грамматика) каждой конструкции входного языка
- •Основная грамматика
- •Подграмматика для операторов
- •Подграмматика объявления констант
- •Связь между дмп-процессорами и подграмматиками
- •Пример перехода от основной грамматики к подграмматике составного оператора Управляющая таблица основной грамматики
- •Управляющая таблица подграмматики составного оператора
- •S– атрибутный дмп процессор
- •Пример атрибутного перевода для арифметических выражений
- •Управляющая таблица подграмматики оператора
- •Управляющая таблица подграмматики оператора вывода
- •Реализация компилятора
- •Генерация ассемблерного кода
Переменная
<переменная>::= id | <элемент_матрицы> | <элемент_массива>
<элемент_матрицы>::= id [ <ар_выражение>, <ар_выражение> ]
<элемент_массива>::= id <индекс_массива>
<индекс_массива>::= [ <ар_выражение> ] | <индекс_массива> [ <ар_выражение> ]
Индексы матриц и массивов должны быть значения только целого типа.
Оператор присваивания
<оператор_присваивания>::= <операция_присвоения> ;
<операция_присвоения>::= <переменная> = <ар_выражение>
В результате выполнения операции присваивания может осуществляться неявное преобразование типа intк типуfloat, но не наоборот.
Объявления переменных, констант и типов
<объявления>::= <объявление_переменных_и_массивов> | <объявление_констант> |
<объявление_матриц>
<объявление_переменных_и_массивов>::= <тип> <список_индетификаторов> ; |
<тип> <список_массивов> ;
<список_индентификаторов>::= <список_идентификаторов> , id | id
<список_массивов>::= <список_массивов> , <элемент_массива>
<тип>::= int | float
<объявление_констант>::= const int <список_констант_цел> ;
<объявление_констант>::= const float <список_констант_вещ> ;
<список_констант_цел>::= <список_констант_цел> , id = num | id = num
<список_констант_вещ>::= <список_констант_вещ> , id = fnum | id = fnum
<объявление_матриц>::= fmatr <список_матриц>
<список_матриц>::= <список_матриц> , <элемент_матрицы> | <элемент_матрицы>
Типом в объявлении переменных служит либо int,float. Константы могут быть только целого или вещественного типа. Объявляемые массивы могут быть многомерными. Максимальная размерность массива 10. В объявлении матрицы первое выражение задает количество строк,
второе - количество столбцов (минимальный размер матрицы [1, 1]). Индекс матрицы/массива должен лежать в диапазоне от 1 до 255.
Операции входного языка и их приоритет
Типы языка
Тип |
Размерность |
Диапазон значений |
int |
16 |
[-32768, 32767] |
float |
32 |
(3.4 * (10**-38), 3.4 * (10**+38) |
fmatr– матрица вещественных чисел.
Приоритеты операций:
Ранг |
Операции |
Ассоциативность |
Пояснение |
1 |
() [] |
|
Бинарные операции |
2 |
* / |
|
Мультипликативные бинарные операции |
3 |
+ - |
|
Аддитивные бинарные операции |
4 |
< <= >= > |
|
Операции отношения |
5 |
== != |
|
Операции отношения |
6 |
= |
|
Операция присваивания |
Лексический анализ
Классы входных литер
Вход лексического анализатора: последовательность литер.
Литеры разбиваются на классы:
Класс |
Обозначение |
Литеры |
0 |
Un |
неопознанный символ |
1 |
Ch |
Заглавные и строчные буквы лат. алфавита, кроме eиEи символа подчеркивания |
2 |
E |
символ Eиe |
3 |
D |
Цифра: 0..9 |
4 |
R |
Разделители: символы с кодами: 9 – табуляция, символы перевода каретки (10, 13), 32 – пробел, EOF- маркер конца файла |
5 |
rs1 |
‘(’, ‘[’, ‘{’, ‘*’, ‘/’, ‘;’, ‘,’ ‘:’ |
6 |
rs2 |
‘)’, ‘]’, ‘}’ |
7 |
rs3 |
‘>’, ‘<’, ‘!’ |
8 |
Eq |
‘=’ |
9 |
P |
‘+’ |
10 |
M |
‘–‘ |
11 |
Pnt |
‘.’ |
Выход лексического анализатора: последовательность лексем.
Разбивка на лексемы и проверка их на корректность осуществляется конечным преобразователем.