我想知道如何在语法中获取标记的行号。假设我有以下语法:
S : expr MINUS expr { $$ = $1 -$3; }
;
如何获取减号令牌的行号?我没有在 jison 中使用词法分析器,而是通过覆盖词法分析器从 lex 文件传递它:
parser.lexer = {
lex: function() {
var token = "MINUS";
parser.lexer.yytext = "...";
parser.lexer.yylineno = xx;
return token;
}
}
我意识到我可以调用yylineno
但是如果语法中的不同标记具有不同的行号,并且我只需要 jison 文件中特定标记的行号怎么办。也许像$1.yylineno
?谢谢!
Jison允许您使用@
表示法访问位置。请参阅此处的"跟踪位置"部分。上面减号的行号将是@2.first_line
。
然后由您的词法分析器提供 Jison 期望的信息。