野牛,从宏指定令牌数字代码

时间:2018-04-30 08:26:28

标签: c bison

我用flex / bison创建了一个自定义编译器,我有一个TokenTypes.h文件,我在其中定义了所有的令牌类型代码。我通过程序广泛使用这些代码,所以我认为最好自己定义它们并保持对它们的控制,而不是让野牛去做。 TokenTypes.h看起来像这样:

#define TokenType_INT 1
#define TokenType_PLUS 2
//...

我的问题是我还没弄明白如何告诉野牛使用这些数字代码。我在文档中读到我可以用字面指定它们:

%token INTEGER 1

但是我不想在这里再次对数字进行硬编码(在这个例子中为1),因为它是在TokenTypes.h中定义的,我希望我不必在2个地方重复和维护所有定义。

我尝试在我的%令牌声明中使用#define'd键TokenType_INT而不是其值(1),但这使得bison失败了:

In file included from ../data/syntax.y:11:0,
                 from ../src/Compiler.c:15:
../src/parser/../lexer/TokenTypes.h:3:31: error: expected identifier before numeric constant
 #define TokenType_INT      1
                               ^
../src/parser/autoGenerated.Syntax.h:73:5: note: in expansion of macro ‘TokenType_INT’
     TokenType_INT = 259,
     ^~~~~~~~~~~~~~~~
In file included from ../data/lex.l:12:0:
../src/lexer/TokenTypes.h:3:31: error: expected identifier before numeric constant
 #define TokenType_INT      1

编辑:对于任何可能遇到与我相同问题的人: 正如我的帖子上的评论已经提出的那样,这在Bison中是不可能的,也是不可取的,所以我会放弃这个想法,让野牛定义价值观。

0 个答案:

没有答案