Как сгенерировать файлы C ++ с помощью Bison и CMake для создания дерева? - PullRequest
0 голосов
/ 28 августа 2018

Я знаю, как Бизон работает на начальном уровне. Моя проблема в том, как я могу заставить CMake генерировать файлы C ++ из заданных входных файлов Bison.
У меня есть существующая структура для Дерева, которую я должен использовать.
Это мой текущий сборочный скрипт, который я использую для изучения Bison.

find_package(BISON)
find_package(FLEX)

BISON_TARGET(MyParser Parser.yxx ${CMAKE_CURRENT_BINARY_DIR}/Parser.c)
FLEX_TARGET(MyScanner Lexer.l  ${CMAKE_CURRENT_BINARY_DIR}/Lexer.c)
ADD_FLEX_BISON_DEPENDENCY(MyScanner MyParser)

add_executable(mathParser
    ${BISON_MyParser_OUTPUTS}
    ${FLEX_MyScanner_OUTPUTS}
)

Как мне изменить файлы Bison, если я хочу сейчас создать код Cpp?

1 Ответ

0 голосов
/ 28 августа 2018

Вы должны сказать Bison использовать скелет C ++

%skeleton "lalr1.cc"

Bison также распознает языковую декларацию

%language "c++"

Но я не думаю, что это необходимо.

Если вы собираетесь использовать C ++ API, внимательно прочитайте документацию .


Хотя я уверен, что интерфейс C ++ имеет преимущества, я почти никогда не использовал его. Код, сгенерированный скелетом C, может быть скомпилирован с C ++ при условии, что вы не можете использовать любой нетривиальный объект как часть семантического типа YYSTYPE. (Вы можете использовать указатель , но не ссылку на любой произвольный тип C ++, но вы не можете использовать умные указатели.)

Однако в руководстве для зубров есть полный пример (по ссылке, вставленной ранее), и было бы целесообразно изучить его для подсказок по использованию.

...