在 Antlr4 中保留空格和换行符

Preserving Whitespace and Newline in Antlr4

我想保留用于处理 C 源文件的空白和换行符,并且我使用的是提到的语法 here

我正在修改行 here 如下,删除重定向以跳过。

Whitespace
    :   [ \t]+
    ;

Newline
    :   (   '\r' '\n'?
        |   '\n'
        )
   ;

但是在任何 C 程序上执行解析器时,请说以下内容:

void main(){
}

正在抛出错误

line 1:13 mismatched input '\n' expecting <EOF>

如果能帮助解决这个问题,我们将不胜感激。谢谢!

这行不通。如果您不跳过空格(或至少将它们放在不同的通道上),它们将返回到解析器并且必须在那里考虑。由于您只更改了词法分析器规则,而没有更改解析器规则,因此实际上无法匹配任何内容。所以 translationUnit?

compilationUnit
    :   translationUnit? EOF
    ;

被简单地跳过,预计 EOF。