
- •Выпускная квалификационная работа бакалавра
- •Задание на выпускную квалификационную работу бакалавра
- •План-график выполнения работы
- •Реферат
- •Введение
- •1 Языковые процессоры
- •1.1 Практическое применениеискусственных языков
- •1.2 Практический пример
- •1.3 Понятие и структура языкового процессора
- •2Обзор существующих систем и обоснование выбора инструментальных средств и класса грамматики
- •2.1 Обзор существующей символьной спецификации моделей гс в среде исма
- •2.1.1 Лексемы языка исма
- •2.1.2 Грамматика языка исма
- •2.1.3 Семантические действия в языковом процессоре исма
- •2.1.4 Заключение
- •2.2 Обоснование выбора инструментальных средств и класса грамматики
- •3 Постановка задачи исследования
- •3.1 Характеристика задачи исследования
- •3.2 Входная информация
- •3.3 Выходная информация
- •3.4 Архитектура среды исма с расширенным языком описания гс
- •4 Программно-математическое обеспечение
- •4.1Лексический анализатор
- •4.1.1 Функции лексического анализатора
- •4.1.2 Спецификация токенови входного алфавита символов
- •4.1.3 Распознавание токенов
- •4.1.4 Иерархия классов модуля
- •4.2 Синтаксический анализатор
- •4.2.1 Функции синтаксического анализатора
- •4.2.2 Спецификация грамматики
- •4.2.3 Метод разбора
- •4.2.4 Восстановление после ошибок
- •4.2.5 Иерархия классов модуля
- •4.3 Семантический анализ
- •4.3.1 Промежуточное представление программы
- •4.3.2 Грамматика с семантическими правилами
- •4.3.3 Модифицированныйметодразбора
- •4.3.4 Семантический анализ. Таблица символов
- •4.3.5 Семантический анализ. Проверка корректности типа
- •4.4 Генерация кода
- •4.5 Система сбора диагностических сообщений
- •5 Тестирование
- •5.1 Лексический анализатор
- •5.2 Синтаксическийанализатор
- •5.3 Семантический анализатор
- •Заключение
- •Список использованных источников
- •ПриложениеA Диагностические сообщения
- •Диагностические сообщения сканера
- •Диагностические сообщения парсера
- •Диагностические сообщения семантического анализатора
- •ПриложениеБ
- •Б.1.3 Установка системы
- •Б.2 Работа с системой б.2.1 Запуск системы и начало работы
- •Б.2.2Ввод программной модели
- •Б.2.3Трансляция модели и просмотр результата
- •Б.2.4Сохранение программной модели
- •Б.2.6Завершение работы с системой
- •Приложение в
- •Листинг программы
- •В.1 Модуль лексического анализатора
- •Файл abstractLexer.H
- •Файл lexer.H
- •Файл lexer.Cpp
- •В.2 Модуль синтаксического анализатора Файл abstractParser.H
- •Файлparser_ll1.H
- •Файл parser_ll1.Cpp
- •В.3 Модуль семантического анализатора Файл symbolTable.H
- •Файл SymbolTableFactory.H
- •Файл checker.H
- •В.4 Модулькодогенератора ФайлastVisitor.H
- •Файл astCodeGen.H
4.1.2 Спецификация токенови входного алфавита символов
В качестве языка спецификации шаблонов лексем используются регулярные выражения. Регулярные выражения могут использоваться для описаниятолько фиксированного (или неопределенного) количества повторений определенной конструкции.
Обозначения,используемые для записи регулярных выражений, приведены в табл. 4.1.
Таблица 4.1– Обозначения для записи регулярных выражений
Регулярное выражение |
Описание |
Пример лексем |
a* |
Множество строк из нуля и более a |
ε, a, aa, … |
a+ |
Множество строк из одного и более a |
a, aa, … |
[a] |
Множество строк из нуля или одного a (необязательная конструкция) |
ε, a |
a | b |
Альтернатива (“a или b”) |
a, b |
ab |
Конкатенация a и b |
ab |
Входной алфавит языка ∑LISMA содержит следующие типы терминальных символов: буква (<letter>, l), цифра (<digit>, d), остальные допустимые символы (<other>). Перечисленные классы символов задаются правилами:
<letter>-> ‘a’|‘b’|‘c’|‘d’|‘e’|‘f’|‘g’|‘h’|‘i’|‘j’|
‘k’|‘l’|‘m’|‘n’|‘o’|‘p’|‘q’|‘r’|‘s’|‘t’|
‘u’|‘v’|‘w’|‘x’|‘y’|‘z’|‘A’|‘B’|‘C’|‘D’|
‘E’|‘F’|‘G’|‘H’|‘I’|‘J’|‘K’|‘L’|‘M’|‘N’|
‘O’|‘P’|‘Q’|‘R’|‘S’|‘T’|‘U’|‘V’|‘W’|‘X’|
‘Y’|‘Z’|‘_’
<digit>-> ‘0’|‘1’|‘2’|‘3’|‘4’|‘5’|‘6’|‘7’|‘8’|‘9’
<other>-> ‘>’|‘<’|‘=’|‘!’|‘[’|‘]’|‘(’|‘)’|‘.’|‘,’|
‘;’|‘’’|‘~’|sp|tab|ns|eof
,где sp, tab, ns , eof соответственно символы пробела, табуляции, перевода каретки, признака конца входного потока.
Типы лексем языка LISMA, соответствующие им регулярные выражения и обозначения приведены в табл. 4.2.
Таблица 4.2– Регулярные конструкции языка LISMA+
№ п/п |
Описание типалексемы |
Имя токена |
Регулярное выражение (шаблон) |
Пример |
1 |
Идентификатор |
ID |
l (l | d)* |
x, var2, _in |
2 |
Целое число |
NUM |
d+ |
22 |
3 |
Число с плавающей точкой |
REAL |
d+. d+| d+ (E | e) [(+ | -)] d+ |
22.5, 22.5E-3 |
4 |
Знаки арифметических действий |
+ |
+ |
+, *, / |
/ |
/ |
|||
* |
* |
|||
5 |
Знаки логических операций |
NE |
!= | <> |
>, <=, != |
EQ |
== |
|||
< |
< |
|||
> |
> |
|||
LE |
<= |
|||
GE |
>= |
|||
6 |
Разделитель фактических параметров функции |
, |
, |
, |
8 |
Признак окончания оператора (инструкции) |
; |
; |
; |
9 |
Открывающая круглая скобка |
( |
( |
( |
10 |
Закрывающая круглая скобка |
) |
) |
) |
11 |
Открывающая квадратная скобка |
[ |
[ |
[ |
12 |
Закрывающая квадратная скобка |
] |
] |
] |
13 |
Признак уравнения |
‘ |
‘ |
‘, ~ |
~ |
~ |
|||
14 |
Знак равенства |
= |
= |
= |
15 |
Минус |
- |
- |
- |
16 |
Бинарные булевы функции |
AND |
and |
and, or |
OR |
or |
|||
17 |
Унарные булевы функции |
NOT |
not |
not |
18 |
Ключевое слово |
CONST |
const |
const |
19 |
Ключевое слово |
MACRO |
macro |
macro |
20 |
Ключевое слово |
IF |
if |
if |
21 |
Ключевое слово |
THEN |
then |
then |
22 |
Ключевое слово |
ENDIF |
endif |
endif |
23 |
Ключевое слово |
IS |
is |
is |
24 |
Ключевое слово |
FROM |
from |
from |
25 |
Ключевое слово |
ARRAY |
array |
array |
26 |
Ключевое слово |
COUNT |
count |
count |
27 |
Конец потока терминальных символов |
END |
eof (или любой другой признак конца файла) |
eof |