Смекни!
smekni.com

Разработка формальных грамматик (стр. 2 из 3)

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 = е.

е = «"! «*»!» –"! «+»! «*»! «/"! «^»!»)"! «=»! «<»! «>».

"s"
"i"
"n"
е4

· 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 = р! «(».


е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»! д! н! р! «&»! «(».


e3

· -

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 Процедура заполняет основные таблицы

6) Пример работы сканера

Исходное выражение:

(sin (2*aa%-&B01)<bb#) and (2+3+4<10) xor &H0

Заполненные в результате работы сканера таблицы:

Табл.10. Таблица идентификаторов
ТИ
ид описатели адр
тип точка точность осн
Aa% Integer 0 2 10 0
Bb# Double 1 16 10 2
Табл.11. Таблица констант
ТК
конст Описатели
тип точка точность осн
2 Integer 0 0 10
&B01 Bin 0 0 2
2 Integer 0 0 10
3 Integer 0 0 10
4 Integer 0 0 10
10 Integer 0 0 10
&H0 Hex 0 0 16
Табл.12. Таблица операций и специальных символов
ТОС
Символ
(
Sin
(
*
-
)
<
)
And
(
+
+
<
)
Xor

5. Синтаксический анализ выражения, которое использовалось в п. 2