gpt4 book ai didi

javascript - PEGJs,创建嵌套数组的语法

转载 作者:行者123 更新时间:2023-12-03 16:35:44 24 4
gpt4 key购买 nike

我有以下输入字符串:

(
(
(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"
]
]
]

关于javascript - PEGJs,创建嵌套数组的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43303446/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com