Jison / Bison获取语法中的标记的行号

时间:2014-02-14 22:31:43

标签: parsing bison jison

我想知道如何在语法中获取令牌的行号。假设我有以下语法:

S : expr MINUS expr { $$ = $1 -$3; }
  ;

如何获取MINUS令牌的行号? 我没有在jison中使用词法分析器,而是通过覆盖词法分析器从lex文件中传递它:

parser.lexer = {
  lex: function() {
    var token = "MINUS";
    parser.lexer.yytext = "...";
    parser.lexer.yylineno = xx;
    return token;
  }
}

我意识到我可以调用yylineno但是如果语法中的不同标记具有不同的行号并且我只想要jison文件中特定标记的行号怎么办? 也许像$1.yylineno这样的东西? 非常感谢你!

1 个答案:

答案 0 :(得分:4)

Jison允许您使用@表示法访问位置。请参阅“跟踪地点”部分here。上面的减号符号的行号为@2.first_line

然后由你的词法分析者来提供Jison所期望的信息。