Cayenne を使用してorg.apache.cayenne.exp.parser.ExpressionParser、一連の を生成する を介して SQL 条件を解析していますorg.apache.cayenne.exp.parser.Token。各トークンのタイプ (識別子、等号、数値、文字列など) を特定したいと考えています。
トークンの型は ExpressionParser によって確実に識別され、intfieldに格納されているように思えますToken.kind。私の解析テストでこのフィールドが示す値は、確実に一貫しています (たとえば、 =is always 5、リテラル文字列は always 42、and演算子は always2など)。
Token.kind私の問題は、値を比較する定数を含む Java クラスが見つからないことです。
フィールドの Javadocは次のようにToken.kind述べています。
このトークンの種類を表す整数。この番号付けシステムは JavaCCParser によって決定され、これらの番号のテーブルがファイル ...Constants.java に格納されます。
ファイルの完全な名前が指定されていないため、JavaCCParser をダウンロード*Constants.*してjavacc-5.0src.zip、javacc-6.0.zip、 、javacc.jarそれら 2 つの zip に含まれる 2 つ、およびcayenne-3.0.2-src.tar.gz.
そこで見つけたクラスのどれも、テストで見た値と一貫して一致する定数を持っているようには見えません。私がそれに到達することができた最も近いものは、クラスorg.apache.cayenne.exp.parser.ExpressionParserConstantswhich for ex. を含みint PROPERTY_PATH = 34、int SINGLE_QUOTED_STRING = 42これはテスト式の実際のトークンと完全に一致しますが、他のトークンにはそのクラスに対応する定数がありません。=記号 ( kind= 5) と演算子and( kind= 2)。
だから私の質問は、どのJavaクラスでそれらの定数が定義されているかを誰かが知っているかどうかです。