【发布时间】:2016-03-18 07:34:35
【问题描述】:
这是我第一次尝试使用 ANTLR4 语法。它应该识别一个非常简单的语句,以命令“label”开头,后跟一个冒号,然后是任意文本,以分号结尾。但是解析器不将“标签”识别为描述。为什么?
grammar test;
prog: stat+;
stat:
description content
;
description:
'label' COLON
;
content:
TEXT
;
TEXT:
.*? ';'
;
STRING : '"' ('""'|~'"')* '"' ; // quote-quote is an escaped quote
COMMENT
: '//' (~('\n'|'\r'))*
;
COLON : ':' ;
ID: [a-zA-z]+;
INT: [0-9]+;
NEWLINE: '\r'? '\n';
WS : [ \t\n\r]+ -> skip ;
代码示例:
label:
this is an error;
wronglabel:YYY
this should be a error;
错误是:
第 1:0 行不匹配输入“标签:\n这是一个错误;”期待“标签” (prog label:\n这是一个错误;\n\n\nwronglabel:YYY\n这应该是一个错误;\n)
【问题讨论】:
-
旁白:这不是错了吗:
ID: [a-zA-z]+;? -
似乎是正确的。我将它与其他示例中的 ID 定义进行了比较,这似乎是定义仅由字母组成的 ID 的常用方法。
-
如果我以这种方式修改 TEXT-token:TEXT: '"' .*? '"' ';' ;它工作得更好。我仍然不知道确切,为什么。
-
对不起,我应该澄清一下。我的意思是,第二个 z 不应该是大写吗?
-
现在我明白了:因为你是对的!