【问题标题】:Parse expression with JavaScript using PEG.js使用 PEG.js 使用 JavaScript 解析表达式
【发布时间】:2021-10-16 12:50:54
【问题描述】:

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

=name1 OR <=name2

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

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

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

=name1 OR =name2 OR =name3 OR =name4

它应该返回以下结构化对象

{
    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

【问题讨论】:

    标签: javascript regex parsing pegjs


    【解决方案1】:

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

    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在线试用

    【讨论】:

    • 感谢您的解决方案。这是我第一次使用PEG.js,我只想在代码沙箱中运行它(我想与我的项目伙伴共享代码)。所以请您指导我将您的解决方案放入沙箱中,因为当我使用给定的解决方案时,它在沙箱中显示错误但在pegjs.org/online 中正常工作。谢谢:)
    • Georg,如果你有时间请检查一下stackoverflow.com/questions/68799056/… 谢谢 :)
    猜你喜欢
    • 2021-10-18
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2011-08-23
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多