我对 ANTLR 语法还不太熟悉。以下是我的 g4 文件中的内容:
tptp_file : tptp_input* EOF;
tptp_input : annotated_formula | include;
annotated_formula : fof_annotated | cnf_annotated;
fof_annotated : 'fof('name','formula_role','fof_formula annotations').';
name : atomic_word | integer;
atomic_word : lower_word | single_quoted;
lower_word : lower_alpha alpha_numeric'*';
lower_alpha : '[a-z]';
upper_alpha : '[A-Z]';
numeric : '[0-9]';
alpha_numeric : '('lower_alpha | upper_alpha | numeric | '[_])';
...
我尝试在这个包含以下内容的测试文件上使用 ANTLR 解析器:
fof(an,axiom,p).
但我收到一条错误消息:
line 1:4 token recognition error at: 'a'
line 1:5 token recognition error at: 'n'
line 1:7 token recognition error at: 'a'
line 1:8 token recognition error at: 'x'
line 1:9 token recognition error at: 'io'
line 1:11 token recognition error at: 'm'
line 1:13 token recognition error at: 'p'
line 1:6 mismatched input ',' expecting {'(', ''', '[1-9]', '[a-z]'}
line 1:12 mismatched input ',' expecting '[a-z]'
line 1:14 mismatched input ').' expecting {'(', '[', '[]', '!', '~', '?', '#', '["]', ''', '[1-9]', '[a-z]', '[A-Z]', '[$]'}
有人能帮我了解我做错了什么以及如何解决吗?谢谢。
我将 lower_alpha 声明为一个片段。
乍一看,这些事情要么是错误的,要么是不好的做法:
语法中有太多文字标记
在解析器规则中执行的操作
').'
只会匹配).
但不匹配) .
(它们之间有一个空格)。尝试最小化解析器规则中的文字标记(除非您知道自己在做什么)并在词法分析器规则中定义它们:并在解析器规则中使用这些标记。
没有词法分析器规则
您没有词法分析器规则,但尝试在解析器规则中创建它们。规则:
匹配文本
[a-z]
,而不是小写字母。请改用以下方法:错误量词
如果您想要匹配零个或多个东西,您不应该做
Alpha_numeric'*'
butAlpha_numeric*
(不带引号)。修复
以下是适用于给定输入的语法
fof(an,axiom,p).
: