 |
 
|
yacc - еще один компилятор компиляторов
Команда yacc преобразует контекстно-свободную грамматику в набор таблиц для простого LR(1)-разбора. Грамматика может содержать неоднозначности; чтобы их преодолеть, используются заданные правила предшествования.
Выходной файл y.tab.c преобразуется C-компилятором в программу yyparse, которую нужно скомпоновать с программой лексического анализа yylex, а также с подпрограммой main и подпрограммой обработки ошибок yyerror. Эти подпрограммы должны быть предоставлены пользователем; при порождении лексических анализаторов полезен lex.
Допустимые опции:
| -v |
Сгенерировать файл y.output, который содержит описание таблиц разбора
с указанием конфликтных ситуаций, вызванных неоднозначностями грамматики. |
| -d |
генерировать файл y.tab.h, который содержит определения #define,
связывающие заданные пользователем "имена лексем" с назначенными
программой yacc "кодами лексем", что позволяет использовать коды лексем в
исходных файлах, отличных от y.tab.c. |
| -l |
Не вставлять в программу y.tab.c операторы #line. Рекомендуется
использовать только после того, как грамматика и другие компоненты
полностью отлажены. |
| -t |
При помощи средств условной компиляции в программу y.tab.c всегда
вставляются отладочные операторы, однако по умолчанию компилятор их
пропускает. Если указана опция -t, то при отсутствии других указаний
отладочные операторы будут скомпилированы. Вне зависимости от
использования опции -t компиляцией отладочных операторов управляет
переменная препроцессора YYDEBUG. Если YYDEBUG имеет ненулевое значение,
отладочные операторы компилируются; при нулевом значении они пропускаются.
Когда программа сформирована без отладочного кода, ее размер меньше и
скорость выполнения несколько выше. |
ФАЙЛЫ
| y.output |
|
| y.tab.c |
|
| y.tab.h |
Определение кодов лексем. |
| yacc.tmp |
Временный файл. |
| yacc.debug |
Временный файл. |
| yacc.acts |
Временный файл. |
| /usr/lib/yaccpar |
Прототип алгоритма разбора для C-программ. |
ДИАГНОСТИКА
В стандартный протокол направляется информация о числе конфликтных ситуаций типа "свертка-свертка" и "перенос-свертка"; более подробные сообщения содержатся в файле y.output. Аналогичным образом сообщается о продукциях, недостижимых из начального символа грамматики.
ОГРАНИЧЕНИЯ
Так как имена файлов фиксированы, в данном каталоге в каждый момент времени может быть активным только один процесс yacc
|