我想保留Whitespaces和Newline字符来处理C源文件,我正在使用上面提到的语法here。
我通过删除重定向跳过来修改here行,如下所示。
Whitespace
: [ \t]+
;
Newline
: ( '\r' '\n'?
| '\n'
)
;
但是在任何C程序上执行解析器时,请说明以下内容:
void main(){
}
抛出错误
line 1:13 mismatched input '\n' expecting <EOF>
非常感谢任何帮助解决这个问题。谢谢!
答案 0 :(得分:2)
这不起作用。如果你没有跳过空格(或者至少将它们放在不同的通道上),它们将被返回到解析器并且必须在那里被考虑。由于您只更改了词法分析器规则,而不是解析器规则,因此无法真正匹配任何内容。
中的translationUnit?
compilationUnit
: translationUnit? EOF
;
简单地跳过并期望EOF。