我想保留空格和换行符来处理 C 源文件,我使用的语法如 here 所述.
我正在修改行形式 here如下,通过去掉重定向来跳过。
Whitespace
: [ \t]+
;
Newline
: ( '\r' '\n'?
| '\n'
)
;
但是在任何 C 程序上执行解析器时,请说以下内容:
void main(){
}
报错
line 1:13 mismatched input '\n' expecting <EOF>
如果能帮助解决这个问题,我们将不胜感激。谢谢!
最佳答案
这行不通。如果您不跳过空格(或至少将它们放在不同的 channel 上),它们将返回到解析器并且必须在那里考虑。由于您只更改了词法分析器规则,而没有更改解析器规则,因此实际上无法匹配任何内容。所以 translationUnit?
在
compilationUnit
: translationUnit? EOF
;
被简单地跳过并且 EOF 是预期的。
关于c - 在 Antlr4 中保留空格和换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34755957/