
- •1. Формальная постановка задачи Задание 10.
- •2. Описание входного языка
- •2.1. Синтаксис входного языка
- •2.2. Описание семантики входного языка
- •3 Описание этапа лексического анализа
- •3.1. Определение типов лексем
- •Определение синтаксиса лексем.
- •Построение диаграммы лексического анализатора.
- •Функции лексического анализатора
- •Описание этапа синтаксического анализа.
- •4.1. Построение кс-грамматики входного языка.
- •Разбиение исходной грамматики на подграмматики.
- •Описание промежуточного языка.
- •4.4. Неформальное описание перевода.
- •4.5. Посторенние атрибутной транслирующей грамматики.
- •4.6. Построение атрибутного дмп-процессора.
- •4.7. Тестирование атрибутного дмп-процессора
Определение синтаксиса лексем.
Определение автоматных грамматик, описывающих синтаксис лексем, будем выполнять в следующем порядке:
Разбить литеры, с помощью которых записываются программы на входном языке, на классы. В один класс помещаются литеры, которые одинаковым образом используются для образования лексем. Примерами классов литер являются: латинская буква, двоичная цифра, десятичная цифра, символ «=».
Составить автоматные грамматики, описывающие синтаксис лексем, при условии, что терминальными символами грамматики являются классы литер, а начальным символом грамматики – символ S.
Разобьем литеры на классы:
Латинская буква
Цифра
Однолитерные разделители
Двухлитерные и однолитерные разделителитили
И составим автоматные грамматики:
Идентификатор id
ε1 – любой символ, кроме букв и цифр.
S буква id
id буква id
id цифра id
S ε1
Целое без знака number
ε2 – любой символ, кроме цифр.
S цифра number
number цифра number
number ε2
Вещественное vesh
ε2 – любой символ, кроме цифр.
S цифра vesh
vesh .T
vesh цифра
vesh E+T
vesh E-T
T цифра T
T ε2
Однолитерные разделители 1–Liter {+, -, *, /, >, <, =, !, {, }, [, ], :, ;, , ., ?, ~ }
ε – любой символ.
S 1–Liter L
L ε3
Двулитерные разделители 2–Liter = {++, --, +=, -=, *=, /=, >=, <=, ==, != }
ε3 – любой символ.
S + N
N +
N ε3
S - N
N -
N ε3
S + N
N =
N ε3
S - N
N =
N ε3
S * N
N =
N ε3
S / N
N =
N ε3
S > N
N =
N ε3
S < N
N =
N ε3
S = N
N =
N ε3
S ! N
N =
N ε3
Построение диаграммы лексического анализатора.
Построение диаграммы лексического анализатора выполним в следующей последовательности:
Для каждой лексемы строится граф конечного автомата, в котором начальное состояние отмечено символом S, а конечное состояние, соответствующее концу разбора лексемы, - символом F.
Начальное и конечное состояния отдельных конечных автоматов объединяются. Если построенный таким образом конечный автомат является недетерминированным, его преобразуют в детерминированный конечный автомат. Граф полученного детерминированного конечного автомата называется диаграммой лексического анализатора.
Идентификатор
Целое без знака
В
ещественное
Однолитерные разделители
Двулитерные разделители
++
--
+=
-=
*=
/=
>=
<=
==
!=
Общая схема:
3.4. Тестирование лексического анализатора.
Тестирование лексического анализатора заключается в моделировании его работы. Результатом этапа лексического анализа являются заполненные в ручную таблицы и выходной поток токенов для контрольного примера, представляющего собой программу на входном языке.