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

时间:2015-03-21 18:30:13

标签: java parsing antlr antlr4

我有以下语法

grammar test;

expression : SALUTATION NAME;

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

如果我有一个像

这样的输入字符串
  1. Hello John
  2. 你好约翰。
  3. 你好John Smith
  4. 所有这些字符串都将被该语法正确解析

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

1 个答案:

答案 0 :(得分:1)

非常简单:

expression : SALUTATION NAME EOF;

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

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

UNKNOWN_CHAR: . ;

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