Табл.2. Таблица одно-литерных | Табл.3. Таблица классов литер | ||||||
терминальных символов | |||||||
ТТС1 | KTL | ||||||
«а» … «z» «A» «C» … «K» «M» … «Z» | Буквы | б | б | ||||
«B» | |||||||
д | |||||||
н | |||||||
р | |||||||
«+» | |||||||
«–» | |||||||
«*» | |||||||
«^» | |||||||
«H» | Шестнадцатеричный префикс | «H» | «=» | ||||
«B» | Двоичный префикс | «B» | «<» | ||||
«0» «1» | Двоичные цифры | д | «>» | ||||
«#» | |||||||
«2» … «9» | Недвоичные цифры | н | «%» | ||||
«$» | |||||||
«(» | |||||||
«» | Разделитель (пробел) | р | «)» | ||||
«+» | Сложение | «+» | «.» | ||||
«–» | Вычитание | «–» | «ы» | ||||
«*» | Умножение | «*» | «H» | ||||
«^» | Степень | «^» | Табл.4. Таблица типов лексем | ||||
«<» | Меньше | «<» | |||||
«>» | Больше | «>» | TLE | ||||
«=» | Равно | «=» | конст_10 | ||||
«#» | Суффикс double | «#» | конст_16 | ||||
«%» | Суффикс integer | «% | конст_2 | ||||
«$» | Суффикс string | «$» | ид_р | ||||
«(» | Открывающая скобка | «(» | sin | ||||
«)» | Закрывающая скобка | «)» | left | ||||
«.» | Точка | «.» | not | ||||
Недопустимый символ | х | and | |||||
Конец файла | ы | or | |||||
xor | |||||||
Табл.5. Таблица ключевых слов | equ | ||||||
разделитель | |||||||
ТКС | + | ||||||
sin | - | ||||||
left | * | ||||||
not | mod | ||||||
and | ^ | ||||||
or | оо | ||||||
xor | ( | ||||||
equ | ) | ||||||
mod | |||||||
Временные таблицы:
Табл.6. Таблица идентификаторов | ||||||
ТИ | ||||||
Ид | описатели | адр | ||||
тип | точка | точность | осн | |||
Табл.7. Таблица констант | ||||||
ТК | ||||||
конст | описатели | |||||
тип | точка | точность | осн | |||
Табл.8. Таблица операций и специальных символов | ||||||
ТОС | ||||||
символ | ||||||
Табл.9. Таблица стандартных символов | ||||||
ТСС | ||||||
TLE | ALE | |||||
Каждый тип лексических единиц описываем с помощью автоматной грамматики и для каждой грамматики составляем эквивалентный ей конечный автомат.
· конст_10
S = нD1! дD1.
D1 = нD1! дD1!». «D2! е.
D2 = нD3! дD3.
D3 = нD3! дD3! е.
е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».
|
| ||||||
· конст_2
S = «&«B0.
B0 = «B» B1.
B1 = дB2.
B2 = дB2!». «B3! е.
B3 = дB4.
B4 = дB4! е.
е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».
| ||||||||
· конст_16
S = «&«B0.
B0 = «H» H1.
H1 = дH1! нH1! «A" H1! «B» H1! «C» H1! «D» H1! «E» H1! «F» H1! е.
е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».
· ид_р
S = бА! «B» A! «H» A.
А = бА! нА! дА! «A» A! «B» A! «C» A! «D» A! «E» A! «F» A! «H» A! «%«A2! «&«A2! «$«A2.
A2 = е.
е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».
| ||||||||||||
|
|
|
|
· sin
S = «s» A4.
A4 = «i» A5.
A5 = «n» A6.
A6 = е4.
е4 = р! «(».
· left
S = «l» A7.
A7 = «e» A8.
A8 = «f» A9.
A9 = «t» A10.
A10 = е4.
е4 = р! «(».
· not
S = «n» A11.
A11 = «o» A12.
A12 = «t» A13.
A13 = е4.
е4 = р! «(».
· and
S = «a» A14.
A14 = «n» A15.
A15 = «d» A16.
A16 = е4.
е4 = р! «(».
· or
S = «o» A17.
A17 = «r» A18.
A18 = е4.
е4 = р! «(».
· xor
S = «x» A19.
A19 = «o» A20.
A20 = «r» A21.
A21 = е4.
е4 = р! «(».
|
| ||||||||||||||||||
· equ
S = «e» A22.
A22 = «q» A23.
A23 = «u» A24.
A24 = е4.
е4 = р! «(».
· разделитель
S = рR1.
R1 = рR1! e0
e0 – любой символ из ТТС1
| |||
· +
S = «+«U1.
U1 = e3.
e3 = б! «B»! «H»! д! н! р! «&»! «(».
|
| |||||
· -
S = «– «U1.
U1 = e3.
e3 = б! «B»! «H»! д! н! р! «&»! «(».
· *
S = «*«U1.
U1 = e3.
e3 = б! «B»! «H»! д! н! р! «&»! «(».
· mod
S = «mod» U1.
U1 = e3.
e3 = б! «B»! «H»! д! н! р! «&»! «(».
S = «^«U1.
U1 = e3.
e3 = б! «B»! «H»! д! н! р! «&»! «(».
· оо
S = «<«O1! «>«O2! «=«O3.
O1 = «>«O4! «=«O4! e3.
O2 = «=«O5! e3.
O4 = e3.
O5 = e3.
O3 = e3.
e3 = б! «B»! «H»! д! н! р! «&»! «(».
· (
S = «(«K1.
K1 = e2.
e2 = б! «B»! «H»! д! н! р! «+»!» –"! «&»! «(».
·)
S =»)«K2.
K2 = e.
е = «"! «*»!» –"! «+»! «*»! «^»!»)"! «=»! «<»! «>».
4) Описываем использованные в сканере подпрограммы:
end – Процедура окончания работы сканера
podgot – Процедура производит общую подготовку сканера к работе
tip – Процедура устанавливает тип литеры
vkl – Процедура добавляет текущую литеру в текущую лексему
cll – Процедура считывает из файла очередную литеру
zaptab – Процедура проверяет наличие текущей лексемы в таблице ключевых слов
out – Процедура заполняет основные таблицы
Пример работы сканера
Исходное выражение:
(sin (2*aa%-&B01)<bb#) and (2+3+4<10) xor &H0
Заполненные в результате работы сканера таблицы:
Табл.10. Таблица идентификаторов | ||||||||
ТИ | ||||||||
ид | описатели | адр | ||||||
тип | точка | точность | осн | |||||
Aa% | Integer | |||||||
Bb# | Double | |||||||
Табл.11. Таблица констант | ||||||||
ТК | ||||||||
конст | Описатели | |||||||
тип | точка | точность | осн | |||||
Integer | ||||||||
&B01 | Bin | |||||||
Integer | ||||||||
Integer | ||||||||
Integer | ||||||||
Integer | ||||||||
&H0 | Hex | |||||||
Табл.12. Таблица операций и специальных символов | ||||||||
ТОС | ||||||||
Символ | ||||||||
( | ||||||||
Sin | ||||||||
( | ||||||||
* | ||||||||
- | ||||||||
) | ||||||||
< | ||||||||
) | ||||||||
And | ||||||||
( | ||||||||
+ | ||||||||
+ | ||||||||
< | ||||||||
) | ||||||||
Xor | ||||||||