在Antlr4中保留空白和换行符

时间:2016-01-12 23:49:52

标签: c antlr antlr4

我想保留Whitespaces和Newline字符来处理C源文件,我正在使用上面提到的语法here

我通过删除重定向跳过来修改here行,如下所示。

Whitespace
    :   [ \t]+
    ;

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

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

void main(){
}

抛出错误

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

非常感谢任何帮助解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:2)

这不起作用。如果你没有跳过空格(或者至少将它们放在不同的通道上),它们将被返回到解析器并且必须在那里被考虑。由于您只更改了词法分析器规则,而不是解析器规则,因此无法真正匹配任何内容。

中的translationUnit?
compilationUnit
    :   translationUnit? EOF
    ;
简单地跳过

并期望EOF。