0

我最终为一小部分 SQL 编写了一个解析器。该语法有很多常规标记(SELECT、CREATE、...)和一些更通用的标记(例如 S_GEN_IDENTIFIER 匹配项[A-Z_.\d]|\"(~[\n, \r, \"])*\")

问题是,“SELECT col AS type ...”没有被解析,因为而不是<S_GEN_IDENTIFIER>“type”列别名匹配为<T_TYPE>.

我有一个想法,用同名规则替换令牌,并检查感兴趣的令牌是否在某个令牌范围内(类似于[<T_AS> - <T_KEEP_DUPLICATES>]. 不幸的是,事实证明令牌和规则的语法不同,所以我不能这样做。我可以将所有标记复制粘贴到新规则中,但出于明显的原因我不想这样做。

有没有办法检查令牌是否在预定义的令牌范围内?

4

1 回答 1

0

也许您可以将“类型”视为无保留的关键字。然后您可以按照常见问题解答 http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc4.19问题 4.19 的建议进行操作

于 2013-10-16T15:40:04.263 回答