Мне нужно преобразовать строку в объект (например, AST), подчиняющийся правилам определенной грамматики.
У меня в основном есть 3 типа выражений ('@', '$' and '#'
).Выражения типа '#' записываются как #something
, а два других - как @something==somethingelse
и $something==somethingelse
.
. Эти выражения можно группировать с помощью конъюнкций ('and', 'or'
) и порядкаоперации могут быть изменены с помощью скобок.
Вот пример полного выражения:
const expression =
`#buy
&& (@car == white || @bike == blue)
&& $user==authenticated`;
Я ищу способ преобразовать это в объект (как AST) ниже, используя javascript или инструмент, основанный на javascript(будет использоваться в проекте React).
const ast = {
type: 'expression',
conjunction: 'null',
expressions: [{
type: 'expression',
conjunction: null,
expressions: [{
type: '#',
left: 'buy',
operator: null,
right: null
}]
},
{
type: 'expression',
conjunction: '&&',
expressions: [{
type: 'expression',
conjunction: 'null',
expressions: [{
type: '@',
left: 'car',
operator: '==',
right: 'white'
}]
},
{
type: 'expression',
conjunction: '||',
expressions: [{
type: '@',
left: 'bike',
operator: '==',
right: 'blue'
}]
}
]
},
{
type: 'expression',
conjunction: '&&',
expressions: [{
type: '$',
left: 'user',
operator: '==',
right: 'authenticaded'
}]
}
]
};