Распознаватель заданной символьной цепочки. Символьная цепочка задается с помощью формул Бэкуса-Наура. В моем варианте (J): <цепочка>::=<описание типа>
<тип>::=array[<нижняя граница>..<верхняя граница>] of <строковый тип>
<нижняя граница>::=<целая константа>
<верхняя граница>::=<целая константа>
<длина>::=<идентификатор>
Программа эта написана на Turbo Pascal.
Структура программы
Распознаватель состоит из 3 блоков :
- Лексический блок - подпрограмма, преобразующая цепочку лексем, полученную от транслитератора, в цепочку лексем вида ("символ входного языка", "класс символа входного языка").
- Блок идентификации кчючевых слов - подпрограмма, которая устанавливает, какое из ключевых слов языка Pascal соответствует заданному идентификатору, либо сообщает, что заданный идентификатор не является ключевым словом языка Pascal. Идентификация ключевых слов может быть выделена в отдельный проход распознавателя символьной цепочки, то есть идентифицирующий блок будет запускаться после того, как лексический блок полностью подготовит всю цепочку лексем. Другим подходом является объединение в один проход распознавателя символьной цепочки лексического блока и блока идентификации. В этом случае идентификация ключевого слова осуществляется каждый раз, когда лексический
- Синтаксический блок — подпрограмма, которая получает цепочку лексем вида ("символ входного языка", "класс символа входного языка") и устанавливает, 'соответствует ли она заданным формулам Бэкуса-Наура. Поскольку задание предполагает только распознавание исходной цепочки, фактически данный блок использует для работы только классы символов входного языка.
Работа программы
Вот как работает эта программа:
1. Считывается цепочка не длиннее 80 символов из файла input.txt
2. На втором этапе цепочка разбивается на символы. И проверяется на наличие ТОЛЬКО допустимых символов. Если все символы допустимы идем дальше...
3. На третьем шаге проверяется присутствие недопустимых комбинаций знаков. Если таких нет - окей. Идем дальше.
4. На этом шаге цепочка разбивается на ключевые слова, типы данных и переменные.
5. Синтаксический анализ. (Правильно ли употреблены и в нужном ли порядке ключевые слова и переменные, а так же правильно ли указан диапазон)
6. И долгожданное слово АЦЦЕПТ! ))) Цепочка то правильная! Если вкралась какая то ошибка то на определенном этапе (в зависимости от характера ошибки) ввывелось бы красное слово Reject! , а в файл output.txt соответственно Reject
Скачать исходник бесплатно прямо с сервера: скачать