[英]ANTLR lexer rule consumes too much
ANTLR Lexer规则设计
我需要以下令牌:
下面的语法中的ANTLR词法分析器规则“ AlphaNumericSpaceHyphen”几乎有效,除了一种情况。 使用解析器规则“ sic”进行测试,以下输入将被解析(不带引号):
“标准工业分类:水运输[4400]”
以下输入无法解析(不带引号):
“标准工业分类:水运输[4400]”
问题在于,词法分析器规则“ AlphaNumericSpaceHyphen”占用了“ WATER TRANSPORTATION”之后的空间和左方括号,然后词法分析器意识到没有匹配项,因为它走得太远了。
我已经尝试过各种类型的谓词,并且在没有任何运气的情况下向前看。 任何帮助是极大的赞赏。
grammar T;
sic: SICSpecifier AlphaNumericSpaceHyphen LEFTBRACKET Digits RIGHTBRACKET;
LEFTBRACKET
: '[';
RIGHTBRACKET
: ']';
SICSpecifier: 'STANDARD INDUSTRIAL CLASSIFICATION:';
WS : (' '|'\t')+
{
$channel = HIDDEN;
};
fragment UCASEALPHA : 'A'..'Z';
fragment LCASEALPHA : 'a'..'z';
fragment DIGIT : '0'..'9';
Digits: DIGIT+;
AlphaNumericSpaceHyphen
: (UCASEALPHA|LCASEALPHA |DIGIT|'-')+ (' ' (UCASEALPHA|LCASEALPHA |DIGIT|'-')+)+
| (UCASEALPHA|LCASEALPHA |DIGIT)+ ('-')+ ((' '|UCASEALPHA|LCASEALPHA |DIGIT|'-')* (UCASEALPHA|LCASEALPHA |DIGIT|'-'))?
| ('-')+ (UCASEALPHA|LCASEALPHA |DIGIT)+ ((UCASEALPHA|LCASEALPHA |DIGIT|'-'|' ')* (UCASEALPHA|LCASEALPHA |DIGIT|'-'))?
;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.