0

我正在编写一个 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))
4

1 回答 1

1

正确处理论点的规则会有所帮助。此外,{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) .)+)
于 2018-08-13T14:22:25.177 回答