我最终为一小部分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>]
。不幸的是,事实证明令牌和规则的语法不同所以我不能这样做。
我可以在新规则中复制粘贴所有令牌,但出于显而易见的原因我不想这样做。
有没有办法检查令牌是否在预定义令牌的范围内?
答案 0 :(得分:0)
也许您可以将“type”视为未保留的关键字。然后,您可以按照FAQ的问题4.19的建议 http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc4.19