我知道野牛如何在初学者水平上工作。
我的问题是如何强制CMake从给定的Bison输入文件生成C ++文件。
我已经有一个必须使用的Tree结构。
这是我当前用来学习Bison的buildscript。
while (scanf("%d",&a) != 1) {
int ch;
puts("Let us try again.");
while ((ch = fgetc(stdin)) != '\n') {
if (ch == EOF) {
puts("End of file or error - let's go home.");
return EXIT_FAILURE;
}
}
}
如果我现在想生成Cpp代码,我该如何更改Bison文件?
答案 0 :(得分:1)
您需要告诉Bison使用C ++框架
%skeleton "lalr1.cc"
野牛还可以识别语言声明
%language "c++"
但是我认为没有必要。
如果要使用C ++ API,请确保仔细阅读documentation。
尽管我确信C ++接口具有优势,但我几乎从未使用过它。 C骨架生成的代码可以使用C ++进行编译,但前提是您不能将任何非平凡的对象用作语义类型YYSTYPE
的一部分。 (您可以使用 pointer ,但不能引用任何任意C ++类型,但不能使用智能指针。)
但是,在bison手册中有一个完整的示例(在前面粘贴的链接中),值得研究一下它的用法提示。