написать фрагмент программы неформального лексического
Для заданной лексики:
- написать фрагмент программы неформального лексического анализа, используя программную заготовку hardlex.cpp;
- построить диаграмму состояний-переходов КА лексического анализатора.
- определить классы символов и построить матрицу переходов КА. По возможности проверить работоспособность анализатора, используя программную заготовку lexan.cpp.
Вариант задания содержит 4-5 лексем из следующего списка (по умолчанию используется синтаксис языка Си):
идентификаторы произвольной длины;
десятичные константы;
восьмеричные константы;
шестнадцатеричные константы;
строковые константы. Символ-ограничитель константы “ внутри строки передается в виде последовательности \”;
комментарии вида /*…*/;
операции +,++,-,--,*, / ;
операции <, << ,>, >> ;
операции &, &&, |, || ;
операции =,==,!=,++,
+=,+ ;
служебные слова int, if, interrupt;
служебные слова for, float, far;
служебные
слова string, struct, step;
служебные слова else, end, exit;
строковые константы. Символ-ограничитель константы “ внутри строки передается в виде последовательности из двух таких символов (пустые строки не допускаются);
комментарии вида //…//;
комментарии вида ((…));
“смайлики” вида “:-)” , “:-(”, “:-)) ”, “:-((” (или другие, по выбору).
Используя заданный синтаксис построить формальные грамматики, для них разработать представление управляющих данных и привести пример разбора по заданному алгоритму:
- Алгоритм рекурсивного спуска. Разработать грамматику. Написать функции разбора правил, аналогично приведенным в sindown1.cpp. Привести пример дерева разбора.
- Нисходящий разбор с использованием LL(1) грамматики. Разработать грамматику. Создать таблицу выбирающих символов и таблицу действий МА. Привести пример дерева разбора. По возможности проверить грамматику на программной заготовке lgram1.cpp;
- Восходящий метод "свертки-переноса". Разработать грамматику. Создать таблицу действий МА. Привести пример дерева разбора. . По возможности проверить грамматику на программной заготовке lowtohigh.cpp.
Желательно результаты работы проверить на соответствующей программной заготовке (имена приведены в тексте) и в файл текста программы внести изменения, касающиеся представления заданной грамматики. Результат разбора (дерево разбора) также внести в файл в виде комментария.
Вариант задания содержит грамматику для арифметических выражений со скобками (операции +,-,*,/,) и для 4-5 конструкций из следующего списка (по умолчанию используется синтаксис языка Си, в том числе приоритеты и направление выполнения операций):