使用行号生成Bison错误消息

时间:2014-02-06 12:08:14

标签: c++ bison flex-lexer

我正在尝试在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位置?替代方案可能是将它们包含在每个令牌中,但这会非常烦人。难看。

0 个答案:

没有答案