Flex - Yacc: неопределенная ссылка на `YY_CURRENT_BUFFER ' - PullRequest
0 голосов
/ 02 сентября 2018

Я делаю компилятор, используя Flex-Yacc, и в настоящее время я пытаюсь создать буферную систему, чтобы помочь мне реализовать циклы for и while. Я прочитал руководство по Flex ( здесь ) и когда я использую YY_CURRENT_BUFFER в своем файле yacc и скомпилирую его, я получаю undefined reference to YY_CURRENT_BUFFER. Как я могу объявить / включить это в мой код? Я много искал, но не могу его найти.

1 Ответ

0 голосов
/ 02 сентября 2018

«YY_CURRENT_BUFFER» - это не переменная, а макрос, локальный для лексера (он не экспортируется в заголовок, сгенерированный lex --header-file, и расширяется до выражения с использованием статических переменных (т. Е. Переменных, локальных для lex.yy). .c, не глобальный, недоступный из других исходных файлов).

Вы должны обернуть весь код, использующий "YY_CURRENT_BUFFER", в функцию в файле lexer (* .l), поместить его определение в заголовок, включенный в файл синтаксического анализатора (* .y), и использовать эту функцию вместо "YY_CURRENT_BUFFER" напрямую.

...