java - Apache Cayenne - 我找不到定义 Token.kind 字段常量的代码

标签 java apache parsing apache-cayenne

我正在使用 Cayenne 来解析 SQL 条件,通过 org.apache.cayenne.exp.parser.ExpressionParser ,产生一系列org.apache.cayenne.exp.parser.Token s,我想确定每个 Token 的类型(如标识符、等号、数字、字符串等)。

token 类型肯定是由ExpressionParser识别的,在我看来,它存储在int中领域Token.kind 。该字段在我的解析测试中显示的值绝对一致(例如 = 始终为 5 ,文字字符串始终为 42and 运算符始终为 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 = 34int 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/

相关文章:

javascript - JSON.parse 仅给出最后一个元素作为输出

java - 查询时出现非法字符

java - 似乎 Set-Cookie 的过期格式为 Mon, 25 Sep 2017 13 :40:02 GMT could not be parsed my apache http client

apache - 安装 solr 和索引 mysql

apache - .htaccess mod_rewrite基于IP的重定向: how to redirect all traffic to a specific subdirectory,(我的IP除外)?

java - 使用 JDOM 解析 XML 文件,出现错误 StackOverflowError

java - Spring AOP 在 Spring Boot 2.1.6 应用程序中没有被调用

java - 抽象类中的静态方法?

java - 如何创建跨服务域模型映射?

python - 如何使用 Django 的 Parse API 解析来自 Sendgrid 的消息?