如何使用 ANTLR4 进行精确的单词解析?
How to do exact word parsing with ANTLR4?
我有以下语法
grammar test;
expression : SALUTATION NAME;
SALUTATION:'Hello';
NAME: ('a'..'z'|'A'..'Z')+;
如果我有一个像
这样的输入字符串
- 你好约翰
- 你好,约翰。
- 你好约翰·史密斯
所有这些字符串都将被该语法正确解析
如何修改语法以使其仅解析具有与示例 1 中完全定义的语法的字符串,而在示例 2 和 3 等其他情况下失败?
很简单:
expression : SALUTATION NAME EOF;
添加 EOF
将强制解析器尝试匹配自动插入到标记流末尾的 EOF
(文件结尾)标记。所以如果你最后有额外的数据,它就会失败。
您还可以在文件的最后添加以下词法分析器规则:
UNKNOWN_CHAR: . ;
这将确保词法分析器始终成功,并且所有错误都将发生在解析器中。
我有以下语法
grammar test;
expression : SALUTATION NAME;
SALUTATION:'Hello';
NAME: ('a'..'z'|'A'..'Z')+;
如果我有一个像
这样的输入字符串- 你好约翰
- 你好,约翰。
- 你好约翰·史密斯
所有这些字符串都将被该语法正确解析
如何修改语法以使其仅解析具有与示例 1 中完全定义的语法的字符串,而在示例 2 和 3 等其他情况下失败?
很简单:
expression : SALUTATION NAME EOF;
添加 EOF
将强制解析器尝试匹配自动插入到标记流末尾的 EOF
(文件结尾)标记。所以如果你最后有额外的数据,它就会失败。
您还可以在文件的最后添加以下词法分析器规则:
UNKNOWN_CHAR: . ;
这将确保词法分析器始终成功,并且所有错误都将发生在解析器中。