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