我正在尝试在Flex / Bison设置中生成正确的编译错误。我向词法分析器添加了代码以跟踪行和字符数,并将其添加到匹配的每个令牌中,如下所示:
struct yystype {
std::string s;
DefLocation def;
union {
...
}
};
这是我的yystype,其中“s”用于任何字符串-y类型,而union包含任何指针类型(用于更多类型的安全性)。但是这两个中只有一个被使用过。
#define TOKEN yylval.s = yytext; yylval.def = DefLocation {yyfilename, yytokenoffs, (size_t)yylineno }
%option yylineno
out { TOKEN; return OUT; }
in { TOKEN; return IN; }
这基本上设置了文本&转发DefLocation(简单结构),说明定义的位置。
现在我的问题是,Bison暴露了我的规则或令牌定义为的结构中的任何一个字段:
%token <s> IN OUT
%type <e> expression13 expression12
我无法找到如何到达def位置。有没有办法访问规则的给定部分的整个yylval,以提取def位置?替代方案可能是将它们包含在每个令牌中,但这会非常烦人。难看。