Для визуального представления входной последовательности используется абстрактное синтаксическое дерево. Абстрактное синтаксическое дерево – это абстрактное представление конструкции языка, полученной из дерева разбора.
Для получения результата трансляции необходимо с грамматическими символами связать атрибуты. С продукциями грамматики связываются семантические действия, вычисляющие значения атрибутов.
Генератор YACC позволяет с правой частью каждой продукции связывать соответствующее семантическое действие.
VARZONE : key_var id LIST_ID dp typ tz VARZONE1 { m[i] := $1+'('+$5+'('+$2+m[$3]+')'+m[$7]+')'; $$ := i; inc(i); }
| { m[i] := ''; $$ := i; inc(i); }
В данном случае для вычисления синтезируемого атрибута стартового нетерминала GOAL необходимо вычисление атрибутов нетерминалов VARZONE и PROGZONE. их вычисление возможно благодаря соответствующим продукциям и связанными с ними семантическими действиями:
VARZONE : key_var id LIST_ID dp typ tz VARZONE1 { m[i] := $1+'('+$5+'('+$2+m[$3]+')'+m[$7]+')'; $$ := i; inc(i); }
После того, как все атрибуты, необходимые для вычисления, будут найдены, мы сможем увидеть результат трансляции в форме абстрактного синтаксического дерева.
Программа, реализованная в данной курсовой работе, выводит на экран результат разбора или сообщение на ошибке. Так, для входной последовательности «var a : integer;begin read(x);y:=x;end.» будет построено следующее абстрактное дерево:
Результат работы программы представлен на рисунке 4.1
Рисунок 4.1 – Результат работы программы
Наглядное представление дерева разбора изображено на рисунке 4.2.
Рисунок 4.2 – Абстрактное синтаксическое дерево
Заключение
В данной курсовой работы была написана программа, которая анализирует на правильность код подмножества языка Pascal. Если вводимая последовательность верна, строится абстрактное синтаксическое дерево. Иначе выводится соответствующее сообщение об ошибке. На основании этого, можно сделать вывод о том, что программа реализует все необходимые функции.
При написании данной курсовой работы был изучен материал по курсу теории автоматов, в частности метод приведения недетерминированного конечного автомата к детерминированному и его минимизация, приобретены навыки работы с генератором синтаксических анализаторов YACC.
Таким образом, цель курсовой работы была достигнута.
Литература
1. Ахо А., Лам М., Сети Р., Ульман Д. Компиляторы: принципы, технологии и инструментарий, 2-е изд.: Пер. с англ. – М. : ООО «И.Д. Вильямс», 2008 – 1184 с.
2. Гордиенко А. П., Салина Н. И. Методические указания по выполнению лабораторных и практических работ по дисциплине: теория языков программирования и методы трансляции, – О. : ОрелГТУ, 2007 – 108 с.
3. Опалева Э.А., Самойленко В.П. Языки программирования и методы трансляции : [учеб. пособие]. СПб. : БХВ-Петербург , 2005. - 476 с., ил.
4. Хопкрофт Дж., Мотвани Э., Ульман Д. Введение в теорию автоматов, языков и вычислений, 2-е изд.: Пер. с англ. – М. : Издательский дом «Вильямс», 2002 – 528 с.