JavaCC匹配令牌组

JavaCC匹配令牌组,javacc,Javacc,最后,我为一小部分SQL编写了一个解析器。 语法有很多常规标记(选择、创建等)和一些更一般的标记(例如,S_GEN_标识符匹配[a-Z.\d]\\”(~[\n\r,\“])*\”) 问题是,“选择列作为类型…”不会被解析,因为“类型”列别名匹配为,而不是 我有一个想法,用一个同名的规则替换令牌,并检查感兴趣的令牌是否位于某个令牌范围内(类似于[-])。不幸的是,令牌和规则的语法不同,因此我无法这样做。 我可以复制粘贴新规则中的所有令牌,但出于明显的原因,我不想这样做 有没有办法检查令牌是否在预定

最后,我为一小部分SQL编写了一个解析器。 语法有很多常规标记(选择、创建等)和一些更一般的标记(例如,S_GEN_标识符匹配
[a-Z.\d]\\”(~[\n\r,\“])*\”

问题是,“选择列作为类型…”不会被解析,因为“类型”列别名匹配为
,而不是

我有一个想法,用一个同名的规则替换令牌,并检查感兴趣的令牌是否位于某个令牌范围内(类似于
[-]
)。不幸的是,令牌和规则的语法不同,因此我无法这样做。 我可以复制粘贴新规则中的所有令牌,但出于明显的原因,我不想这样做

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

也许您可以将“type”视为无保留关键字。然后您可以按照常见问题解答问题4.19的建议进行操作

谢谢您的链接。实际上,大多数常用SQL关键字都是保留的。但我使用的Oracle有许多未保留的关键字,显然在我的情况下,复制粘贴是不可避免的。