Parsing 初始匹配后忽略lexer规则

Parsing 初始匹配后忽略lexer规则,parsing,syntax,antlr4,lexer,Parsing,Syntax,Antlr4,Lexer,谢谢你看我的问题 所以我有语法和词法规则,用来解析杂货店列表上的用户输入。 语法与诸如“10磅牛肉”之类的句子相匹配,其标记为“数量单位”。ware标记匹配任何有效的unicode字符串,但我无法输入与unit标记匹配的字符串,因为它们被unit规则捕获。所以我的问题是,在第一次匹配之后,我是否可以指示我的lexer忽略单位规则,这样我就可以输入带有标记“amount unit ware”的“10磅磅”,而不会出现错误 语法: grammar Shopping; import lexerrule

谢谢你看我的问题

所以我有语法和词法规则,用来解析杂货店列表上的用户输入。 语法与诸如“10磅牛肉”之类的句子相匹配,其标记为“数量单位”。ware标记匹配任何有效的unicode字符串,但我无法输入与unit标记匹配的字符串,因为它们被unit规则捕获。所以我的问题是,在第一次匹配之后,我是否可以指示我的lexer忽略单位规则,这样我就可以输入带有标记“amount unit ware”的“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' ;

您可以对字符串使用解析器规则(而不是lexer规则),允许字符串为
(CHAR | WEIGHT | LENGTH | VOLUME)+
;字符串:(字符串|单位);最后我完成了上面的工作,看起来很有效,谢谢你给我指明了正确的方向!。