1
我有一種語法,我無法區分可能屬於布爾值或字符串的值的歧義。使用含糊不清的字符串值解析ANTLR4規則
該語法有幾個字段類型字符串和布爾類型。一個String字段幾乎可以包含引號內的任何內容,而一個布爾值可以包含「Y」或「N」。問題:有時一個String字段也可以包含「Y」或「N」(通常作爲多個單字符值列表的一部分)。
以下是相關的語法規則。我試過用一個謂詞來消除布爾比較的字符串,只要該字符串是「Y」或「N」。
booleanLogical
: booleanAtom (EQ|NE) booleanAtom
| booleanAtom (EQ|NE) {_input.LT(1).getText().equals("\"Y\"") || _input.LT(1).getText().equals("\"N\"")}? STRING
;
booleanAtom
: BOOLEAN_FIELD
;
stringLogical
: stringAtom (EQ|NE|LT|LE|GT|GE) stringAtom
| STRING_FIELD (EQ|NE|LT|LE|GT|GE) ('"Y"'|'"N"')
;
stringAtom
: STRING_FIELD
| STRING
;
BOOLEAN_FIELD: ("BFIELD1","BFIELD2","BFIELD3");
STRING_FIELD: ("SFIELD1","SFIELD2","SFIELD3");
試圖解析布爾表達式時的錯誤消息:
BFIELD1="Y"
是:
line 1:7: no viable alterative at input 'BFIELD1="Y"'
在antlr3,我會只用一個超前,但是這不再是一個選項。
那裏有任何幫助嗎?