I have the followind DSL definition:
fragment Personenname:
sex=Sex anrede=Anrede? (titelList+=NAME '.')* (firstName+=Vornamen ('und' firstName+=Vornamen)?) adelsList+=LOWERNAME* lastName=Nachname
;
fragment Adresse:
(adress=Adress | "bei" personRef=[Person|PID])
(email=EMAIL) ?
;
Person:
(
('Firma' firma=Firmenname Personenname? name=PID
Adresse
(note=STRING)?)
|
('Person' Personenname name=PID
Adresse
(note=STRING)?)
(jogger=Jogger)?
)
;
Adress:
plz=PLZ city=CityName
street=STRING
;
Vornamen:
NAME (('-'|'+') NAME)*;
Nachname:
NAME ((('-'|'+') NAME) | (E NAME))*;
PID:
NAME NAME NAME
;
Firmenname:
(LOWERNAME|NAME (('+')? NAME)* (('+'|'&') Firmenform)*);
Firmenform:
"gGbmH" | "GmbH" | "OHG" | "AG" | "Co" | "KG"
;
CityName:
(NAME '.')? NAME (('-'|'+') NAME)* ('/' NAME '.'?)?;
ACCOUNT:
NAME (('_'|"."|"+") NAME)*
;
SITE:
LOWERNAME ('.' LOWERNAME)+
;
EMAIL:
ACCOUNT '@' SITE
;
terminal E:
'e'
;
terminal PLZ:
(('A'..'Z')+ "-")? '0'..'9' '0'..'9' '0'..'9' '0'..'9' ('0'..'9')?;
enum Anrede:
sie | du ;
Sex:
"D&H" | "Mann" | "Frau"| "Ehe"| "Familie" ;
terminal LOWERNAME:
('a'..'z' | 'ß'..'ö' | 'ø'..'ý' | 'ÿ')+;
terminal UPPERNAME:
('A'..'Z' | 'À'..'Ö' | 'Ø'..'Ý');
terminal NAME:
UPPERNAME (LOWERNAME | '-')*;
And I have the following DSL text:
Firma Hugo+Boss+AG JaFirHug
99999 Nirgendwo
"Straße 99999"
And I get the error "mismatched input 'JaFirHug' expecting RULE_NAME".
I expected that 'JaFirHug' would be matched as name=PID in Person.
Why it does not ?
Thanks for an answer.