使用 PEG.js 使用 JavaScript 解析表达式

Parse expression with JavaScript using PEG.js

我已经编写了解析以下表达式的代码

=name1 OR <=name2

{
    operator: 'or',
    values: [
        {
            op: '=',
            value: 'name1 ',
        },
        {
            op: '<=',
            value: 'name2',
        },
    ],
}

使用 PEG.js。请检查代码沙箱。

但我不知道如何解析 follwong 表达式

=name1 OR =name2 OR =name3 OR =name4

应该return下面的结构化对象

{
    operator: 'or',
    values: [
        {
            op: '=',
            value: 'name1',
        },
        {
            op: '=',
            value: 'name2',
        },
        {
            op: '=',
            value: 'name3',
        },
        {
            op: '=',
            value: 'name4',
        }
    ],
}

代码沙箱:https://codesandbox.io/s/javascript-testing-sandbox-forked-76n0p?file=/src/index.js

我想你可以用以下语法描述你的语言:

Expression = head:Term tail:(_ "OR" _ Term _)*  {
    return [head].concat(tail.map(t => t[3]))
}

Term = _ op:Operator _ name:Name  {
    return {op, name}
}

Operator = "=" / "=<"

Name = head:[a-z] tail:([a-z0-9]*) {
    return head + tail.join('')
}

_ = [ \t\n\r]*

您可以在 https://pegjs.org/online

上在线试用