[英]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.