JavaCC匹配令牌组

时间:2013-10-16 12:22:38

标签: javacc

我最终为一小部分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>]。不幸的是,事实证明令牌和规则的语法不同所以我不能这样做。 我可以在新规则中复制粘贴所有令牌,但出于显而易见的原因我不想这样做。

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

1 个答案:

答案 0 :(得分:0)

也许您可以将“type”视为未保留的关键字。然后,您可以按照FAQ的问题4.19的建议   http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc4.19