可以使用 {getCharPositionInLine() == 0}?
语义预测来判断当前是否为行首,但是注意该函数实现是基于 \n
换行符的,如果文本中换行使用的 \r
,那么使用该方法判定则不会生效,该方法对应的源码位于 LexerATNSimulator.java at 4.9.3:
1 | public int getCharPositionInLine() { |
可以看出,其仅将 \n
视为换行。
Reference
ANTLR4 Lexer Matching Start of Line End Of Line - Stack Overflow