【问题标题】:How to do exact word parsing with ANTLR4?如何使用 ANTLR4 进行精确的单词解析?
【发布时间】:2015-03-21 18:30:13
【问题描述】:

我有以下语法

grammar test;

expression : SALUTATION NAME;

SALUTATION:'Hello'; 
NAME: ('a'..'z'|'A'..'Z')+;

如果我有类似的输入字符串

  1. 你好约翰
  2. 你好约翰。
  3. 你好约翰·史密斯

所有这些字符串都将被该语法正确解析

如何修改语法以使其仅解析具有示例 1 中定义的语法的字符串,而在示例 2 和 3 等其他情况下失败?

【问题讨论】:

    标签: java parsing antlr antlr4


    【解决方案1】:

    很简单:

    expression : SALUTATION NAME EOF;
    

    添加EOF 将强制解析器尝试匹配自动插入到标记流末尾的EOF(文件结尾)标记。所以如果你最后有额外的数据,它就会失败。

    您还可以在文件的最后添加以下词法分析器规则:

    UNKNOWN_CHAR: . ;
    

    这将确保词法分析器始终成功,并且所有错误都将发生在解析器中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-12
      相关资源
      最近更新 更多