ANTLR输入不匹配'';期望

ANTLR输入不匹配'';期望,antlr,antlr4,antlrworks,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 p

我做这个语法是为了我能识别街道,邮政编码,等等,它只给出那个错误,但我不能解决它

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

有人明白吗?

Id\u Env匹配123,因为它在Num之前。
Ter

您应该改为使用一些lexer规则。正如Ter已经指出的,您有一些lexer规则可以匹配相同的输入。这被解析为“第一个胜利”,即最重要的胜利

我还将把
Lettra
作为一个片段,因为否则它将匹配诸如R/C'或'cave'之类的东西


还要注意,
Ponto
匹配任何单个字符。虽然我不精通你的母语,但在我看来,
Ponto
应该只符合这一点,所以你必须写
而不是

对不起,我打断了你,但你能看看这里吗: