- •Министерство образования
- •Исходная постановка задачи
- •1. Описание входного языка
- •2. Этап лексического анализа Определение типов лексем
- •Соотношения токенов и лексем.
- •Функции лексического анализатора
- •3. Описание синтаксического анализа
- •3) Подграмматика объявлений
- •5. Тестирование дмп-процессора
- •1) Главная подграмматика
- •2) Подграмматика if/for
2. Этап лексического анализа Определение типов лексем
Идентификатор – последовательность латинских букв, цифр и знака подчёркивания, начинающаяся с буквы или знака подчёркивания.
Константа
Числовая целая – последовательность цифр.
Числовая вещественная – последовательность цифр, в которой присутствует точка, разделяющая целую и дробную части. Точка не может быть первым или последним символом.
Арифметическая операция
Аддитивная
Мультипликативная
Автоинкремент, автодекремент
Унарный минус
Унарный плюс
Логическое отрицание
Разыменование
Операция отношения
Операция сравнения
Операция проверки на равенство
Операция присваивания
Ключевое слово или символ языка
Разделители
Описатели
Соотношения токенов и лексем.
|
Токен |
Лексема |
Языковая конструкция |
|
_ID |
|
Идентификатор |
|
_ZCONST |
|
Целочисленная константа |
|
_RCONST |
|
Вещественная константа |
|
_AOP |
+, - |
Аддитивная операция |
|
# |
!, *, -, +, ++, -- |
Унарная операция |
|
_MOP |
*, / |
Мультипликативная операция |
|
_INC |
++, -- |
Автоинкремент и автодекремент |
|
_EOP |
==, != |
Операция проверки на равенство |
|
_COP |
<, <=, >, >= |
Операция сравнения |
|
= |
= |
Присваивание |
|
x= |
+=, -=, *=, /= |
Сокращённое присваивание |
|
&& |
&& |
Логическое И |
|
|| |
|| |
Логическое ИЛИ |
|
? |
? |
Символ «?» |
|
, |
, |
Символ «,» |
|
. |
. |
Символ «.» |
|
: |
: |
Символ «:» |
|
; |
; |
Символ «;» |
|
( |
( |
Символ «(» |
|
) |
) |
Символ «)» |
|
{ |
{ |
Символ «{» |
|
} |
} |
Символ «}» |
|
[ |
[ |
Символ «[» |
|
] |
] |
Символ «]» |
|
>> |
>> |
Символ ввода из вх. потока |
|
<< |
<< |
Символ вывода в вых. поток |
|
IF |
if |
Ключевое слово |
|
ELSE |
else |
Ключевое слово |
|
FOR |
for |
Ключевое слово |
|
CONST |
const |
Ключевое слово |
|
NEW |
new |
Ключевое слово |
|
DELETE |
delete |
Ключевое слово |
|
CIN |
cin |
Ключевое слово |
|
COUT |
cout |
Ключевое слово |
|
INT |
int |
Ключевое слово |
|
FLOAT |
float |
Ключевое слово |
|
ENUM |
enum |
Ключевое слово |
|
VOID |
void |
Ключевое слово |
|
MAIN |
main |
Ключевое слово |
Таблицы лексем
Таблица ключевых слов
|
Номер таблицы |
Индекс |
Значение |
|
0 |
0 |
IF |
|
1 |
0 |
ELSE |
|
2 |
0 |
FOR |
|
3 |
0 |
CONST |
|
4 |
0 |
NEW |
|
5 |
0 |
DELETE |
|
6 |
0 |
CIN |
|
7 |
0 |
COUT |
|
8 |
0 |
INT |
|
9 |
0 |
FLOAT |
|
10 |
0 |
ENUM |
|
11 |
0 |
VOID |
|
12 |
0 |
MAIN |
Таблица операторов присваивания
|
Номер таблицы |
Индекс |
Значение |
|
13 |
0 |
= |
|
|
1 |
+= |
|
|
2 |
-= |
|
|
3 |
*= |
|
|
4 |
/= |
Таблица бинарных операций
|
Номер таблицы |
Индекс |
Значение |
|
14 |
0 |
+ |
|
|
1 |
- |
|
|
2 |
* |
|
|
3 |
/ |
|
|
4 |
&& |
|
|
5 |
|| |
Таблица унарных операций
|
Номер таблицы |
Индекс |
Значение |
|
15 |
0 |
- |
|
|
1 |
+ |
|
|
2 |
! |
|
|
3 |
* |
|
|
4 |
++ |
|
|
5 |
-- |
Таблица разделителей
|
Номер таблицы |
Индекс |
Значение |
|
16 |
0 |
, |
|
|
1 |
. |
|
|
2 |
; |
|
|
3 |
: |
|
|
4 |
{ |
|
|
5 |
} |
|
|
6 |
( |
|
|
7 |
) |
|
|
8 |
[ |
|
|
9 |
] |
Таблица отношений
|
Номер таблицы |
Индекс |
Значение |
|
17 |
0 |
< |
|
|
1 |
> |
|
|
2 |
<= |
|
|
3 |
>= |
|
|
4 |
== |
|
|
5 |
!= |
Таблица символов ввода/вывода
|
Номер таблицы |
Индекс |
Значение |
|
18 |
0 |
>> |
|
|
1 |
<< |
Таблица идентификаторов
|
Номер таблицы |
Индекс |
Значение |
|
19 |
0 |
|
|
|
… |
|
|
|
n |
|
Таблица целочисленных констант
|
Номер таблицы |
Индекс |
Значение |
|
20 |
0 |
|
|
|
… |
|
|
|
m |
|
Таблица вещественных констант
|
Номер таблицы |
Индекс |
Значение |
|
21 |
0 |
|
|
|
… |
|
|
|
m |
|
