对于以下语法,
grammar names;
fullname : TITLE? FIRST_NAME LAST_NAME;
TITLE : 'Mr.' | 'Ms.' | 'Mrs.' ;
FIRST_NAME : ('A'..'Z' | 'a'..'z')+ ;
LAST_NAME : ('A'..'Z' | 'a'..'z')+ ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ -> skip ;
在解析输入时,如#34; Mr。约翰史密斯",它抛出异常
mismatched input 'Smith' expecting LAST_NAME
是否可以配置ANTLR来处理这种情况? 如果不可能,可以采用哪种替代方法来处理它?</ p>
请注意,它不仅限于这种简单的情况。
答案 0 :(得分:5)
FIRST_NAME
和LAST_NAME
之间没有语法差异;你只需要分配它们。
grammar names;
fullname : TITLE? first=NAME last=NAME;
TITLE : 'Mr.' | 'Ms.' | 'Mrs.' ;
NAME : ('A'..'Z' | 'a'..'z')+ ;
WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ -> skip ;
然后,您可以调用get("first")
和get("last")
从匹配中提取已解析的值。