【发布时间】:2015-04-11 04:37:04
【问题描述】:
我有以下语法用于规范化后解析人名。
exp : fullName EOF;
fullName : title? f=name m=name? l=name;
title: TITLE;
name : NAME;
TITLE : 'mr'| 'mrs' | 'ms';
NAME : ('a'..'z')+;
WHITESPACE : ('\t' | ' ' | '\r' | '\n'| '\u0020' | '\u000C' )+ -> skip ;
当我解析像“mr john me smith”这样的名字时,它可以正常工作 但是当其中一个标题标记显示为“mr john mr smith”之类的名称时,我收到以下错误
line 1:8 extraneous input 'mr' expecting NAME
line 1:16 missing NAME at '<EOF>'
(exp (fullName (title mr) (name john) (name mr smith) (name <missing NAME>)) <EOF>)
有没有办法只根据它在规则中的位置使用令牌,如果它出现在其他位置则忽略它?
【问题讨论】:
-
词法分析器独立于解析器运行,因此
mr将始终被解析为TITLE。查看@SaraVF 的解决方案