如何在ANTLR3 TreeParser中获取行号

3
我正在尝试获取ANTLR3树语法中的行号(由ANTLR3生成的代码属于TreeParser类)。 Google只能找到适用于ANTLR2的解决方案,而这些解决方案在ANTLR3中不起作用。 为了澄清,我正在尝试访问.g文件本身中的行号。
我认为我必须重写一个方法或扩展一个类,只是不知道该选择哪一个。
提前感谢您的帮助。
编辑:我应该指出我正在使用Java API。

如何在ANTLR3中创建TreeParser?可以参考ANTLR3教程来帮助你。 - Tamara Wijsman
丹尼,请问你可以把做这个的v2代码的链接发一下吗? - Bart Kiers
@bart Kiers,这是:http://antlraux.sourceforge.net/(库)和http://tech.puredanger.com/2007/02/01/recovering-line-and-column-numbers-in-your-antlr-ast/(代码)希望能有所帮助。 - danny
2个回答

3

看来我一直在搜索一个太远的东西。在.g文件中访问Tree语法规则的行号,只需请求token.getLine(); (它在内部是CommonTree)。

例如:

assign: ID '=' expression {int line = $ID.getLine()}; // $ID是CommonTree类型


我在@init中遇到了同样的问题,但没有令牌的帮助。解决方案是将代码移动到规则操作中,并向AST添加一个标记令牌。 - Andy Thomas

1

1
是的,我知道你可以访问令牌(使用树解析器中的TreeAdaptor),但是如何获取当前的令牌?特别是在.g文件中?(顺便说一句,谢谢你的回答) - danny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接