這應該是一個簡單的問題。鑑於此解析器規則:ANTLR規則不匹配
ifStatement :expr3b = IF logical(〜(THEN))expression *(ELSE expression *)? ENDIF //缺少那麼 ;
爲什麼這不符合這個字符串?
「IF代碼= \」 10 \ 「DUE_DATE < YESTERDAY ENDIF」
(IF,THEN,ELSE,ENDIF和令牌被定義你承擔什麼他們。邏輯和表達的其他規則)。
Jason
這應該是一個簡單的問題。鑑於此解析器規則:ANTLR規則不匹配
ifStatement :expr3b = IF logical(〜(THEN))expression *(ELSE expression *)? ENDIF //缺少那麼 ;
爲什麼這不符合這個字符串?
「IF代碼= \」 10 \ 「DUE_DATE < YESTERDAY ENDIF」
(IF,THEN,ELSE,ENDIF和令牌被定義你承擔什麼他們。邏輯和表達的其他規則)。
Jason
我假設以下行是從您的語法verbatum。
ifStatement : expr3b=IF logical (~(THEN)) expression* (ELSE expression *)? ENDIF;
如果是這樣的話,那麼你會希望把它改成這樣:
ifStatement : expr3b=IF logical expression* (ELSE expression *)? ENDIF;
正因爲如此,(~(THEN))
說:「與任何一個道理,只要它不是THEN
「。 logical
完成後的第一個標記爲ID
(或相似)DUE_DATE
。 ifStatement
消耗它來履行(~(THEN))
。這使得< YESTERDAY
履行expression
,失敗。
下面輸入將由ifStatement
你的問題被接受,因爲ENDIF
滿足(~(THEN))
:
IF CODE=\"10\" ENDIF DUE_DATE < YESTERDAY ENDIF
因爲第一ENDIF
被消耗預期這將只工作匹配(~(THEN))
。
是的,它做到了。感謝您的幫助(再次)。 – Jason
沒有看到邏輯和表達式的產物,我的猜測是'CODE =「10」'是一個錯誤的表達式,可能在''10「的詞法處理中。但是你所知道的信息太少了。 – msw