我最终为一小部分 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>]
. 不幸的是,事实证明令牌和规则的语法不同,所以我不能这样做。我可以将所有标记复制粘贴到新规则中,但出于明显的原因我不想这样做。
有没有办法检查令牌是否在预定义的令牌范围内?