使用 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]*
上在线试用
我已经编写了解析以下表达式的代码
=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]*
上在线试用