Javascript PEGJs,创建嵌套数组的语法
我有以下输入字符串:Javascript PEGJs,创建嵌套数组的语法,javascript,regex,pegjs,Javascript,Regex,Pegjs,我有以下输入字符串: ( ( (App = smtp AND "Server Port" != 25) OR (App = pop3 AND "Server Port" == 20) ) AND (App = smtp AND "Server Port" != 35) ) OR (App = pop3 AND "Server Port" != 110) AND ( (App = imap AND "Server P
(
(
(App = smtp AND "Server Port" != 25)
OR
(App = pop3 AND "Server Port" == 20)
)
AND
(App = smtp AND "Server Port" != 35)
)
OR
(App = pop3 AND "Server Port" != 110)
AND
(
(App = imap AND "Server Port" != 143)
OR
(App = pop3 AND "Server Port" == 20)
)
AND (App = imap OR "Server Port" != 143)
希望转变为:
[
[
[
'App = smtp AND "Server Port" != 25',
'OR',
'App = pop3 AND "Server Port" == 20'
],
'AND',
'App = smtp AND "Server Port" != 35'
],
'OR',
'App = pop3 AND "Server Port" != 110',
'AND',
[
[
'App = imap AND "Server Port" != 143',
'OR',
'App = pop3 AND "Server Port" == 20'
]
],
'AND',
'App = imap OR "Server Port" != 143'
]
如何在pegjs语法中实现这一点
我当然可以编写javascript代码,但我正在寻找PEGjs中的一些帮助。这应该可以让您开始,它大致满足您的需求
start =
_ ex:expression _
{
return ex;
}
expression =
op:operand bi:binary?
{
return bi ? [op].concat(bi) : op;
}
operand =
paren / terminal
paren =
'(' _ ex:expression _ ')'
{
return ex;
}
binary =
_ op:operator _ ex:expression
{
return [op, ex];
}
operator =
'OR' / 'AND'
terminal =
$((!paren [^)])+)
_ = [\r\n ]*
输出:
[
[
[
"App = smtp AND \"Server Port\" != 25",
"OR",
"App = pop3 AND \"Server Port\" == 20"
],
"AND",
"App = smtp AND \"Server Port\" != 35"
],
"OR",
[
"App = pop3 AND \"Server Port\" != 110",
"AND",
[
[
"App = imap AND \"Server Port\" != 143",
"OR",
"App = pop3 AND \"Server Port\" == 20"
],
"AND",
"App = imap OR \"Server Port\" != 143"
]
]
]
输入字符串是否只有这么多,或者您有相当长的字符串?请解释您的努力以何种方式失败。