- •Содержание
- •1. Организация таблицы идентификаторов
- •1.1 Исходные данные
- •1.2 Назначение таблиц идентификаторов
- •1.3 Хеш-адресация с рехешированием.
- •1.4 Упорядоченный список
- •1.5 Результаты
- •2. Проектирование лексического анализатора
- •2.1 Исходные данные
- •2.2 Принципы работы лексического анализатора
- •2.3 Схема распознавателя
- •2.4 Результаты
- •3.1 Исходные данные
- •3.2 Построение синтаксического анализатора
- •Список литературы
2.3 Схема распознавателя
Распознаватель – это специальный алгоритм, который позволяет определить принадлежность цепочки символов заданному языку.
Схема распознавателя представлена на рисунке 2:
Рис.6 Схема распознавателя
Во входном языке константы заданы в шестнадцатеричной форме. Шестнадцатеричная константа должна содержать цифры и буквы от A до F (будем рассматривать только прописные буквы). Имена идентификаторов должны содержать только английские буквы и цифры.
Грамматика входного языка в форме Бэкуса-Наура:
^ – знак пробела.
Для удобства введем дополнительные обозначения:
x1 – все символы x2 – все симв. кроме ^ x3 – все симв. кроме 0..9 x4 – все симв. кроме } x5 – все симв. кроме A..F,0..9,^ x6 – все симв. кроме a..z, 0..9,^ x7 – все симв. кроме a..z, 0..9 x8 – символы a..g, i..z, 0..9 x9 – символы a..d, f..z, 0..9 x10 – символы a..e, g..z, 0..9 x11 – символы a..q, s..z, 0..9 x12 – символы a..n, p..z, 0..9 x13 – символы a..f, h..z, 0..9 x14 – символы a..k, m, o..z, 0..9 x15 – символы a..c, e..z, 0..9 |
x16 – символы a..h, j..z, 0..9 x17 – символы a..r, t..z, 0..9 x18 – символы a..k, m..z, 0..9 x19 – символы a..s, u..z, 0..9 x20 – символы a..m, o..z, 0..9 x21 – все симв. кроме = x22 – все симв. кроме ^, h x23 – символы a..z, 0..9 x24 – символы 0..9, A..F x25 – символы 1..9, A..F x26 – символы 0..9 x27 – символы 1..9 x28 – все симв. кроме a..z, 0..9, ∙ x29 – символы a..c, e..h, j..z, 0..9 |
G ( {0..9, a..z, A..F, ;, <, >, +, -, (, ), :, =, ^ }, { S, E, H F1, F2 B1, B2, B3, OR, OR1, IR, IR1, IR2, NR, NR1, NR2, T, I, P1, P2, Z, C, D, DO, DO1, WH, WH1, WH2, WH3, WH4, BE, BE1, BE2, BE3, BE4, EN, EN1, EN2, EN3, EN4, EN5, PR, PR1, PR2, PR3, IF, IF1, TH, TH1, EL1, EL2, EL3, SH, SH1, KO}, P, S )
P:
S®^|B1^|B2^|B3^|KO^|T^|F1^|F2^|P2^|Z^|IR^|IR1^|IR2^|IN^| IN1^|IN2^|I^|ORx6|OR^|WH^|WH1^|WH2^|WH3^|WH4^|DO^|DO1^| BE^|BE1^|BE2^|BE3^|BE4^|PR^|PR1^|PR2^|PR3^|EN^|EN1^|EN2^|EN3^|EN4^|EN5^|EL1^|EL2|EL3^|TH^|TH1^|TH2^|TH3^|IF^|IF1^|
T® ;
F1® )
F2® (
Z® +|-|*|/
KO® {
B1® <
B2® >
B3® =
IR® a
IR1® IRn
IR2® IR1d
IN® n
IN1® INo
IN2® IN1t
OR® o
OR1® ORr
C® x27|Cx26
D® 0
SH® Dh
SH1® SHx25|SH1x24
DO® d
DO1® DOo
WH® w
WH1® WHh
WH2® WH1i
WH3® WH2l
WH4® WH3e
PR® p
PR1® PRr
PR2® PR1o
PR3® PR2g
BE® b
BE1® BEe
BE2® BE1g
BE3® BE2i
BE4® BE3n
EN® e
EN1® n
EN2® EN1d
EN3® EN2∙
EN4® EN2i
EN5® EN4f
EL1®ENl
EL2® EL1s
EL3®EL2e
IF® i
IF1® IFf
TH® t
TH1® THh
TH2®TH1e
TH3®TH2n
I®IRx20|IR1x15|IR2x23|INx12|IN1x19|IN2x23|Ix23|ORx11|OR1x23| WHx8|WH1x16|WH2x18|WH3x9|WH4x23|DOx12|DO1x23|BEx9|BE1x13| BE2x16|BE2x16|BE3x20|BE4x23|PRx11|PR1x12|PR2x13|PR3x23|ENx14| EN1x15|EN2x29|EN4x10|EN5x23|EL1x17|EL2x9|EL3x23|THx8|TH1x9|TH2x20| TH3x23|IFx10|IF1x23
Конечный детерминированный автомат M’({S, E, H F1, F2 B1, B2, B3, OR, OR1, IR, IR1, IR2, NR, NR1, NR2, T, I, P1, P2, Z, C, D, DO, DO1, WH, WH1, WH2, WH3, WH4, BE, BE1, BE2, BE3, BE4, EN, EN1, EN2, EN3, EN4, EN5, PR, PR1, PR2, PR3, IF, IF1, TH, TH1, EL1, EL2, EL3, SH, SH1, KO},{0..9, a..z, A.F, ;, <, >, +, -, *, /, (, ), :, =, ^ },d,H,{S}), который распознает язык, заданный этой грамматикой, представлен приложении Б. Начальным состоянием автомата является состояние H, конечным S. Поскольку КА работает с непрерывным потомком лексем, перейдя в конечное состояние, он тут же должен возвращаться в начальное, чтобы распознавать очередную лексему. Поэтому в моделируемой программе эти два состояния объединяются. В автомат введено особое состояние E, обозначающее состояние «ошибка». В это состояние КА переходит всегда, когда получает на вход символ, по которому нет переходов из текущего состояния.