5655030d

написать фрагмент программы неформального лексического


Для заданной лексики:

- написать фрагмент программы неформального лексического анализа, используя программную заготовку 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 конструкций  из следующего списка (по умолчанию используется синтаксис языка Си, в том числе приоритеты и направление выполнения операций):

Логические операции &&, ||, !;

Операции [], () – вызов функции;

Операции над указателями *,&;

Операции ++,--;

Операции сравнения ==, !=,<, >, <=, >=;

Операция присваивания =;

Операция “запятая”;

Поразрядные операции &, |, ~, ^;

Операции над структурой (“стрелочка” и “точка”);

Преобразование “выражение – оператор”  (символ “;”);

Блок (последовательность операторов, заключенная в {} );

Оператор while;

Оператор do – while;

Оператор for;

Оператор if (с else и без него);

Оператор if с синтаксисом if-else-endif  (Бейсик);

Оператор do-loop (Бейсик);

Определение простых переменных и массивов типов int, double;

Заголовок функции с результатом и параметрами типов int, double;

Определение простых переменных и кратных указателей вида int ***p.

7. Список литературы

1. Ф.Льюис, Д. Розенкранц, Р.Стирнз. Теоретические основы проектирования компиляторов. М., Мир, 1979.

2. Р Хантер. Проектирование и конструирование компиляторов. М., Мир.

3. Т.Пратт. Языки программирования. Разработка и реализация. М., Мир, 1979.

4. Л.Бек. Введение в системное программирование. М.,Мир, 1988.

5. Язык Си для профессионалов. И.В.К.Софт. М.: 1991.

2. Лексический анализ


Содержание раздела