我想知道如何在语法中获取令牌的行号。假设我有以下语法:
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
这样的东西?
非常感谢你!
答案 0 :(得分:4)
Jison允许您使用@
表示法访问位置。请参阅“跟踪地点”部分here。上面的减号符号的行号为@2.first_line
。
然后由你的词法分析者来提供Jison所期望的信息。