【问题标题】:ANTLR 3.5.2 matches rule even though input has extra tokensANTLR 3.5.2 匹配规则,即使输入有额外的标记
【发布时间】:2016-06-13 17:49:32
【问题描述】:

我正在编写一个语法来解析 sql 语句。我有以下规则:

show_databases :
    SHOW DATABASES { System.out.println("Showing databases");    
;

当我的输入是 show databases 时,我会收到消息。但是,当我的输入是 show databases now 时,我确实看到了该消息。我正在构建一个 REPL,所有行都以 ; 结尾。我想得到一个错误,因为语法错误。有什么想法吗?

【问题讨论】:

    标签: java parsing syntax antlr3


    【解决方案1】:

    也匹配输入的结尾:

    SHOW DATABASES ';'
    

    或

    SHOW DATABASES EOF
    

    按照您的方式,解析器不知道以后不能将“现在”作为另一个语句的一部分。实际上,它会在成功匹配规则时停止,如果不需要,它甚至不会查看下一个令牌。

    【讨论】:

    • 我刚刚编辑了问题,但我一次阅读 1 行,所有行都以 ';' 结尾。
    • 然后也匹配分号,而不是EOF。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多