ANTLR (解析用) と Pentaho Kettle (ルールの実行用) を使用するカスタム ルール エンジン用の文法を作成しようとしています。
パーサーの有効な入力は次のようなものです。
(<Attribute_name> <Relational_Operator> <Value>) AND/OR (<Attribute_name> <Relational_Operator> <Value>)
つまり、PERSON_PHONE = 123456789 です。
これが私の文法です:
grammar RuleGrammar;
options{
language=Java;
}
prog : condition;
condition
: LHSOPERAND RELATIONOPERATOR RHSOPERAND
;
LHSOPERAND
: STRINGVALUE
;
RHSOPERAND
: NUMBERVALUE |
STRINGVALUE
;
RELATIONOPERATOR
: '>' |
'=>' |
'<' |
'<=' |
'=' |
'<>'
;
fragment NUMBERVALUE
: '0'..'9'+
;
fragment STRINGVALUE
: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_')*
;
fragment LOGICALOPERATOR
: 'AND' |
'OR' |
'NOT'
;
私が直面している問題は、文字列値と比較することです。つまり、PERSON_NAME=1 は文法を通過しますが、値PERSON_NAME=BATMAN
は機能しません。私は ANTLRWorks を使用しており、 のデバッグでRHS 値PERSON_NAME=BATMAN
を取得しています。MismatchTokenException
誰かが私が間違っているところを教えてもらえますか?