ANTLR输入''期望不匹配

时间:2014-04-29 18:02:23

标签: antlr antlr4 antlrworks

我正在制作这种语法,以便我可以识别街道,鳕鱼等,它只会出现错误,但我无法解决。

grammar LabeledExpr;

/** The start rule; begin parsing here. */ 
exp: Inicio parte1 parte2 parte4 NL exp 
| Inicio parte6 parte2 parte7 NL exp
|fim;

fim: /*vazio*/;
parte1: Id_Env Str Rua;
parte2: Virg Num parte3|/*vazio*/;
parte3: Andar|/*vazio*/;
parte4:Cod_Postal Str parte5;
parte5: Str |/*vazio*/;
parte6: Cod_Postal Id_Env Rua;
parte7:Str Str parte5;

Space  : (' '|'\t')+ { skip(); }; 
Inicio : '#ID#';
Id_Env: [1-9]Nu?Nu?Nu?|'0';
Rua : '\"'('Rua'|'Av.'|'Trav.')Letra'\"';
Str : '\"'Letra'\"';
Letra: [A-Za-z ]+;
XXXX : [1-9]YYY;
YYY : Nu Nu Nu;
Andar: Num | 'R/C' | 'cave';
Cod_Postal: XXXX('-'YYY)?;
Num: [1-9]Nu*;
Nu: [0-9];
Virg:',';
NL : [\r\n]+;
Ponto: . ;

错误是:

line 1:38 mismatched input '123' expecting Num
line 2:35 mismatched input '3' expecting Num
line 3:55 mismatched input '9876' expecting Num
line 4:39 mismatched input '2623' expecting Num

有人理解吗?

2 个答案:

答案 0 :(得分:0)

Id_Env与Num之前的123匹配。 叔

答案 1 :(得分:0)

您应该制定一些词法规则解析器规则。就像Ter已经指出的那样,你有一些lexer规则可以匹配相同的输入。这被解决为“第一次胜利”,即最高胜利。

我还会使Lettra成为一个片段,否则会匹配R / C'或'cave'之类的东西。

另请注意,Ponto匹配任何单个字符。虽然我不熟练使用你的母语,但我觉得Ponto只能匹配这一点,所以你必须写'.'而不是.