Разработка лексического анализатора

Имеется входной язык, который выглядит следующим образом:

<Программа>::=<Объявление переменных><Описание вычислений>
<Описание вычислений>::=Begin <Список присваиваний> End
<Объявление переменных>::=Var <Список переменных>
<Список переменных>::=<Идент>|<Идент>,<Список переменных>|
 <Идент> ; <Список переменных>
<Список присваиваний>::=<Присваивание>|
 <Присваивание><Список присваиваний>
<Присваивание> ::=<Идент> := <Выражение> ;
<Выражение> ::= <Ун.оп.><Подвыражение> | <Подвыражение>
<Подвыражение> :: = ( <Выражение> ) | <Операнд> |
 <Подвыражение> <Бин.оп.> <Подвыражение>
<Ун.оп.> ::="-"
<Бин.оп> ::="-" | "+" | "*" | "/"
<Операнд> ::= <Идент>|<Константа>
<Идент> ::= <Буква> <Идент> | <Буква>
<Константа> ::= <Цифра> <Константа> | <Цифра>

По заданию необходимо:

  1. Определить, какие классы лексем будут в языке.

  2. Составить контрольные примеры на реализуемом языке. Хотя бы один пример должен проверять поведение программы при наличии недопустимых символов в транслируемом файле.

  3. Запрограммировать и отладить модуль сканирования. Выполнить тестирование на контрольных примерах. Результатом работы должна быть таблица, содержащая лексемы и признаки их классов. Необходимо включить в результирующий файл информацию о номерах строк исходного текста транслируемой программы.

И вот здесь начинается совсем не понимание всего и вся. Вроде понятно с первым пунктом, но как это реализовать, например, в C++ не ясно, потому что по входному языку ничего не ясно и чуждый лес. Буду очень благодарен, если найдутся примеры или хорошая теория, и поясните что к чему.


Ответы (0 шт):