c - 在 Antlr4 中保留空格和换行符

标签 c antlr antlr4

我想保留空格和换行符来处理 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/

相关文章:

c - c中的接口(interface)/逻辑设计技术

c - 如何使用C选择文本文件的最后一行

来自 bison 的 ANTLR 语法

java - 在 ANTLR 中,如何根据特定的低级规则解析流?

java - 给定ANTLR java语法获取java源方法名称列表?

java - Antlr4 - 无法获得岛屿语法吗?

c - gets() 和 puts() 显示我没有输入的字符

c - 如何在linux中找到要包含在库函数中的头文件

java - 如何使用ANTLR4进行精确的词解析?

antlr - 如何使用 ANTLR4 多次重写 token 流