2.1. Классы литер.
Разделим множество литер на следующие классы:
Класс 0 |
неопознанный символ |
Класс 1 |
заглавные и строчные буквы латинского алфавита, кроме E, e |
Класс 2 |
цифра |
Класс 3 |
/ |
Класс 4 |
* |
Класс 5 |
> |
Класс 6 |
< |
Класс 7 |
= |
Класс 8 |
! |
Класс 9 |
& |
Класс 10 |
| |
Класс 11 |
E, e |
Класс 12 |
. |
Класс 13 |
( ) , { } [ ] ; : |
Класс 14 |
\n \t \v \32 - знаки пробел, перевод каретки, горизонтальная и вертикальная табуляция |
Класс 15 |
“ |
Класс 16 |
+ |
Класс 17 |
- |
2.2. Классы лексем.
Все лексемы разделены на следующие классы:
Ключевые слова.
Идентификаторы переменных и констант.
Идентификаторы меток.
Однолитерные разделители.
Двулитерные разделители.
Константы.
Строки.
В конечном состоянии Q0 выполняются следующие действия в зависимости от номера предыдущего состояния.
Номер предыдущего состояние |
выполняемые действия |
3 |
Записываем полученную строку символов в таблицу идентификаторов, (если данного идентификатора раньше не было в таблице) если следующий символ на входной цепочке ‘:’, то этот идентификатор имеет тип метки. На выходную цепочку записываем соответствующую лексему типа идентификатор. |
2 |
Производится поиск в таблице ключевых слов. Если поиск заканчивается успешно, то это ключевое слово а иначе записываем полученную строку символов в таблицу идентификаторов, (если данного идентификатора раньше не было в таблице). На выходную цепочку записываем соответствующую лексему типа ключевое слово или типа идентификатор. |
9, 11, 13, 15, 23, 17 |
На выходную цепочку записываем соответствующую лексему типа однолитерный разделитель. |
12, 14, 16, 18, 20, 22, 10 |
На выходную цепочку записываем соответствующую лексему типа двулитерный разделитель. |
19, 21, 25 |
Ошибка |
4, 6, 26, 27, 28, 5 |
Производится поиск в таблице констант. Если поиск заканчивается неуспешно, то записываем полученную строку символов в таблицу констант. На выходную цепочку записываем соответствующую лексему типа константа. |
29 |
Строки. Записываем полученную строку символов в таблицу строк. |