我正在使用 Cayenne 来解析 SQL 条件,通过 org.apache.cayenne.exp.parser.ExpressionParser
,产生一系列org.apache.cayenne.exp.parser.Token
s,我想确定每个 Token 的类型(如标识符、等号、数字、字符串等)。
token 类型肯定是由ExpressionParser识别的,在我看来,它存储在int
中领域Token.kind
。该字段在我的解析测试中显示的值绝对一致(例如 =
始终为 5
,文字字符串始终为 42
, and
运算符始终为 2
等)。
我的问题是我找不到包含要比较的常量的Java类Token.kind
值(value)观。
字段 Token.kind
的 Javadoc说:
An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java.
它没有指定文件的全名,所以我下载了JavaCCParser,并检查了几个*Constants.*
在javacc-5.0src.zip
中找到的文件, javacc-6.0.zip
,两个javacc.jar
包含在这两个 zip 中,并且 cayenne-3.0.2-src.tar.gz
.
在我看来,我发现的类中没有一个常量与我在测试中看到的值一致匹配。
我能做到的最接近的是类 org.apache.cayenne.exp.parser.ExpressionParserConstants
对于前。包含int PROPERTY_PATH = 34
和int SINGLE_QUOTED_STRING = 42
这绝对与我的测试表达式的实际标记匹配,但其他标记在该类中没有相应的常量,例如。 =
符号 ( kind
= 5) 和 and
运算符(kind
= 2)。
所以我的问题是是否有人知道这些常量是在哪个 Java 类中定义的。
最佳答案
首先我要提到的是,ExpressionParser 旨在解析非常特定格式的 Cayenne 表达式。它肯定不能用来解析SQL。所以你可能找错了方向。
Parser本身就是JavaCC根据这个grammar file生成的。解析器的标记在此文件的底部正式定义,并且非常特定于手头的任务。
关于java - Apache Cayenne - 我找不到定义 Token.kind 字段常量的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19788921/