我想有以下語法(的一部分):ANTLR與非貪婪規則
expression
:
expression 'AND' expression
| expression 'OR' expression
| StringSequence
;
StringSequence
:
StringCharacters
;
fragment
StringCharacters
: StringCharacter+
;
fragment
StringCharacter
: ~["\]
| EscapeSequence
;
應該匹配像「ABCDF」(不帶引號),以及像「的東西a AND b AND c「。
問題是我的規則StringSequence是貪婪的,並且消耗OR/AND。我嘗試過不同的方法,但無法讓我的語法以正確的方式工作。這可能與ANTLR4?請注意,我不想在每個字符串周圍加引號。
StringSequence :
(StringCharacter | NotAnd | NotOr)+
;
fragment NotAnd :
'AN' ~'D'
| 'A' ~'N'
;
fragment NotOr:
'O' ~('R')
;
fragment StringCharacter :
~('O'|'A')
;
獲取更復雜一點與空白的規則:把引號,因爲該規則變得不貪婪,即:
StringSequence
: '"' StringCharacters? '"'
;