ANTLR Lexer规则设计
我需要以下令牌:
下面的语法中的ANTLR词法分析器规则“AlphaNumericSpaceHyphen”几乎可以工作,除了一个案例。使用解析器规则“sic”进行测试,以下输入将解析(不带引号):
“标准工业分类:水运[4400]”
以下输入无法解析(不带引号):
“标准工业分类:水运[4400]”
问题是词法分析器规则“AlphaNumericSpaceHyphen”在“水运”之后消耗了空格和左方括号,之后词法分子意识到没有匹配,因为它太过分了。
我已尝试过各种类型的谓词,并且没有任何运气就可以向前看。非常感谢任何帮助。
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|'-'))?
;
答案 0 :(得分:0)
不幸的是,词法分析器规则没有回溯。你可以看看
ANTLR lexer rule consumes characters even if not matched?
您可以尝试调整语法,以便您可以按照此解决方案中的建议更改令牌的类型。
希望这会对你有所帮助。