获取相对于文件开头的令牌起始字符位置

use*_*325 5 token antlr4

antlr4 API 是否有任何可靠的方法来获取相对于文件开头的令牌起始字符位置,而不是行?在做了一些研究之后,我发现唯一的方法是使用 IntStream 的一些自定义实现,它不会将 '\n' 视为行终止符,但也许我错过了一些更简单的方法?如果重要的话,我正在使用访客 API。

我正在处理的应用程序解析源文件并为另一个使用提供的坐标插入附加代码的应用程序提供插入坐标。如果另一个应用程序在文件中获得符号位置,而不是 line:positionInLine 对,那会方便得多。

Sam*_*ell 5

您可以使用以下任何一种,具体取决于您拥有的是 aToken还是TerminalNode.

  • @user2592325 我对`getSourceInterval` 的看法不正确。您需要使用`Token.getStartIndex()`,并在必要时使用`TerminalNode.getSymbol()` 来获取`TerminalNode` 的实际`Token`。 (2认同)