- •0. Формулировка задания
- •1. Описание входного языка Формулы Бэкуса-Наура
- •2. Описание семантики входного языка Правила реализации конструкций языка
- •3. Описание этапа лексического анализа.
- •3. 1. Определение типов лексем.
- •3. 2. Определение синтаксиса лексем.
- •3. 3. Построение диаграммы лексического анализатора.
- •3. 4. Таблицы лексем.
- •3. 5. Тестирование лексического анализатора.
- •4. Описание этапа синтаксического анализа
- •4.1. Разбиение кс–грамматики входного языка на подграмматики
- •4.2. Описание промежуточного языка
- •4.3. Неформальное описание перевода
3. Описание этапа лексического анализа.
3. 1. Определение типов лексем.
Типы лексем, выделяемых лексическим анализатором из программы на входном языке, определяются входным языком. Лексический анализатор исключает из текста исходной программы комментарии, незначащие пробелы, символы табуляции и перевода строки и выделяет лексемы следующих типов:
идентификаторы;
целые и вещественные беззнаковые константы;
ключевые слова входного языка;
однолитерные и двулитерные разделители.
Соотношение между токенами и лексемами.
Токен |
Лексемы |
Языковая конструкция |
id |
count, index |
Идентификатор |
nat |
0, 1, 10, 100 |
Целое число без знака |
num |
1.2, 1e-10, 1e10 |
Вещественное число без знака |
program, begin, end, label, const, var, type, real, integer, complex, vector, read, readln, write, writeln, goto, if, then, else, while, do, length, sum, dif, multscal, multconst, abs, im, re, and, or, not |
program, begin, end, label, const, var, type, real, integer, complex, vector, read, readln, write, writeln, goto, if, then, else, while, do, length, sum, dif, multscal, multconst, abs, im, re, and, or, not |
Ключевые слова program, begin, end, label, const, var, type, real, integer, complex, vector, read, readln, write, writeln, goto, if, then, else, while, do, length, sum, dif, multscal, multconst, abs, im, re, and, or, not |
:= |
:= |
Оператор присваивания |
rel |
<, >, <=, >=, <> |
Операция отношения |
+ |
+, - |
Операция типа «сложение» |
* |
*, / |
Операция типа «умножение» |
( |
( |
Открывающая круглая скобка |
) |
) |
Закрывающая круглая скобка |
[ |
[ |
Открывающая квадратная скобка |
] |
] |
Закрывающая квадратная скобка |
# |
# |
Скобка, ограничивающая комплексное число |
= |
= |
Символ «=» |
; |
; |
Символ «;» |
, |
, |
Символ «,» |
: |
: |
Символ «:» |
. |
. |
Символ конца программы |
3. 2. Определение синтаксиса лексем.
Определение автоматных грамматик, описывающих синтаксис лексем.
3. 2. 1. Классы литер, с помощью которых записываются программы на входном языке:
класс «буква»: a A … z Z
класс «цифра»: 0 1 2 3 4 5 6 7 8 9
класс «однолитерные разделители»: ; , + - * / = ( ) [ ]
класс «литеры однолитерных и двулитерных разделителей»: < > = :
3. 2. 2. Составление автоматных грамматик, описывающих синтаксис лексем.
Терминальными символами грамматики являются классы литер, а начальным символом грамматики – символ S.
Автоматная грамматика, описывающая синтаксис лексем «идентификатор» и «ключевое слово». Здесь “Буква” – класс «буква», “Цифра” – класс «цифра», “1” – класс, включающий все литеры, за исключением букв и цифр.
Правила грамматики:
S |
|
Буква Id |
Id |
|
Буква Id |
Id |
|
Цифра Id |
Id |
|
1 |
Автоматная грамматика, описывающая синтаксис лексемы «целая константа без знака». Здесь “Цифра” – класс «цифра», “2” – класс, включающий все литеры, за исключением цифр.
Правила грамматики:
S |
|
Цифра C |
C |
|
Цифра C |
C |
|
2 |
Автоматная грамматика, описывающая синтаксис лексемы «вещественная константа без знака». Здесь “2” – класс, включающий все литеры, за исключением цифр.
Правила грамматики:
S |
|
Цифра C |
C |
|
Цифра C |
C |
|
. T |
C |
|
e T |
C |
|
e + T |
C |
|
e – T |
T |
|
Цифра D |
D |
|
Цифра D |
D |
|
2 |
Автоматные грамматики, описывающие синтаксис лексем «однолитерный разделитель» и «двулитерный разделитель». Здесь “Знак” – классы «однолитерные разделители» и «литеры однолитерных и двулитерных разделителей», “3” – класс, включающий все литеры.
Правила грамматики:
однолитерные разделители:
|
S |
|
Знак L |
L |
|
3 |
лексема «:=» |
S |
|
: Next |
|
Next |
|
= E |
|
E |
|
3 |
лексема «<=» |
S |
|
< Next |
|
Next |
|
= E |
|
E |
|
3 |
лексема «>=» |
S |
|
> Next |
|
Next |
|
= E |
|
E |
|
3 |
лексема «<>» |
S |
|
< Next |
|
Next |
|
> E |
|
E |
|
3 |