感谢您查看我的问题。
所以我使用语法和词法规则来解析购物清单上的用户输入。 该语法匹配诸如“10磅牛肉”之类的句子。其中有令牌数量单位商品'。 ware令牌匹配任何有效的unicode字符串,但我无法输入单位令牌匹配的字符串,因为它们被单位规则捕获。所以我的问题是,我可以指示我的词法分析员在第一场比赛后忽略单位规则,这样我就可以输入“10磅英镑”。与令牌数量单位商品'没有错误?
语法:
grammar Shopping;
import lexerrules;
parse : item EOF ;
item : (amount (SPACE* unit)? SPACE+)? ware | (unit (SPACE* amount)? SPACE+)? ware ;
ware : STRING (SPACE+ STRING)* ;
amount : NUM ;
unit : UNIT ;
Lexer规则:
lexer grammar lexerrules;
NUM : [0-9]+(('.'|',')[0-9]+)? ;
UNIT : WEIGHT | LENGTH | VOLUME | MISC ;
STRING : CHAR+
SPACE : ' ' ;
WS : [\u000C\f\t\r\n]+ -> skip ;
CHAR : '\u0041' .. '\uFFFF' ;
WEIGHT : [Kk]'g' | [Kk]'ilo' | [Kk]'ilogram' | [Gg] | [Gg]'ram' |
[Dd]'ecigram' | [Oo]'unce' | [Oo]'z' | [Pp]'ound' | [Ll]'b' ;
LENGTH : [Mm] | [Mm]'eter' | [Cc]'m' | [Cc]'entimeter' |
[Ii]'nch' | [Ii][Nn] ;
VOLUME : [Ll] | [Ll]'iter' | [Dd]'l' | [Dd]'eciliter' | [Cc][Ll] |
[Cc]'entiliter' ;