0

我目前正在尝试从函数表达式生成抽象语法树,例如:

OR(FunctionOne("valueA", "valueB", "valueC"), FunctionTwo("valueD", "valueE", "valueF"))

基本上是运算符(AND | OR)及其函数(可以嵌套)的简单串联。

我想将此字符串传输到抽象语法树,例如:

value
  OR
    FunctionOne:
      value1: valueA
      value2: valueB
      value3: valueC
    FunctionTwo:
      value4: valueD
      value5: valueE
      value6: valueF

到目前为止我做了什么...

从云雀进口云雀

parser = Lark(r"""
    value: operator

    operator : operatorvalue"("function"(how_to_handle_params)"*")"
    operatorvalue : "OR" | "AND"

    function : "FunctionOne" | "FunctionTwo"

    """, start='value')

有人可以帮我解决这个问题吗?

只需要一些起点,因为文档只处理 json ...

谢谢和问候!

4

1 回答 1

0

作为一般规则,您应该尝试在语法中表示每个实体的责任。因此,例如,一个函数包含它自己的参数:

function: NAME "(" params? ")"

params: (NAME ","?)+

Lark 有很多示例语法,例如计算器PythonLark(它自己的语法)

于 2018-10-25T07:47:28.443 回答