我正在编写一个PegJS语法来解析SQL语句。我正在将函数拆分为function_id(function_args)
。对于函数args,我想匹配除最后一个(
以外的所有字符,包括)
和)
,这对于嵌套函数是必需的。
如何编写规则以匹配包括)
的所有字符,除非)
是字符串中的最后一个字符。
语法在下面给出
Function
= func_name open_p args close_p
func_name
= name:[A-Z]+ {return name.join('');}
open_p
= "("
close_p
= ")"
args
= ar:(.*[^)]) {return ar.join('');}
,测试字符串为
AVG(A + AVG(B + C))
答案 0 :(得分:0)
正确处理参数的规则会有所帮助。另外,您可以在规则中使用{return name.join('');}
表示法来组合已解析的字符串,而不必使用$()
。
args
可以重复function
或nonfunction
。 nonfunction
通过向前捕获来捕获所有不是功能的东西。
function
= func_name open_p (args+ / "") close_p
func_name
= $([A-Z]+)
open_p
= "("
close_p
= ")"
args
= function / nonfunction
nonfunction
= $((!(function / close_p) .)+)