Создание синтаксического анализатора с помощью программы yacc
Программа yacc создает синтаксические анализаторы, которые определяют и контролируют структуру текстового ввода компьютерной программы.
Для работы с этой
программой необходимо определить следующий элементы:
- файл грамматики
- Исходный файл, содержащий спецификации распознаваемого языка. В этом файле также находятся определения функций main, yyerror и yylex. Это обязательные функции.
- main
- Функция языка C, которая, как минимум, вызывает функцию yyparse, созданную программой yacc. Ограниченная версия этой функции присутствует в библиотеке yacc.
- yyerror
- Функция языка C, предназначенная для обработки ошибок, возникающих при работе синтаксического анализатора. Ограниченная версия этой функции присутствует в библиотеке yacc.
- yylex
- Функция языка C, выполняющая лексический анализ входного потока и передающая лексемы синтаксическому анализатору. Лексический анализатор можно создать с помощью команды lex.
На основе файла спецификаций программа yacc создает файл y.tab.c на языке C. После компиляции файла командой cc формируется код функции yyparse, возвращающей целое число. При работе функция yyparse вызывает для чтения лексем функцию yylex. Функция yylex возвращает лексемы до тех пор, пока синтаксический анализатор не обнаружит ошибку или yylex не вернет маркер конца, означающий завершение входного потока. При возникновении неустранимой ошибки функция yyparse возвращает в функцию main значение 1. При обнаружении маркера конца функция yyparse возвращает в функцию main значение 0.