在 PEG 解析器中解析和验证条件 IF

问题描述

尝试解析单行条件,其中代码尝试测试左手是否等于右手。

{
  user = {id: 'abc123'}
  function_name() {...}
}

if (user.id === 'abc123...') { function_name() }

到目前为止我已经看过这些帖子 PEG-php parsing if statementHow to describe conditional statement (if-then-else) using PEG

PEG 语法对我来说非常陌生,我确信它是否是满足我需求的正确方法。可能有点矫枉过正。

目前正在使用 peg.js/peggy.js

解决方法

你的问题很模糊,我会尽量给你一个起点,

这是一个会消耗您的示例输入的语法。

Code = (Condition / Curly / Statement)+

Curly = '{' code: Code+ '}' { return {nested: code}}

Statement = $([^{}]+)

Condition = _ 'if' _ '(' lhs:term '===' rhs:term ')' _ body: Code {
  return {condition: {lhs,rhs},body}
}
term = $[^{}()=]+
_ "whitespace"
  = [ \t\n\r]*

对于条件部分,它将产生

  {
      "condition": {
         "lhs": "user.id ","rhs": " 'abc123...'"
      },"body": [
         {
            "nested": [
               [
                  " function_name() "
               ]
            ]
         }
      ]
   }