相对于算术表达式,Json和XML等解析,SQL就比较复杂了. 举个例子来说:符号“(”是目前的SqlAnalyzer1.00中作为进入递归的标志之一,到“)”结束,中间是个查询语句.如果测试用例也是这样,自然没有问题,但是,SQL是灵活的... 首先,括号里未必是子查询,它可能是函数的一部分,比如count(*), 这时就得回退记号,然后按函数重读: 其次,函数嵌套也常见,比如substr里面有个length,这时候读到第一个“)”就认为结束是不合情理的: 其三,有时查询不是非放到括号里才能正…