【问题标题】:Python - Lark - Grammar - Can not generate ASTPython - Lark - 语法 - 无法生成 AST
【发布时间】:2019-03-23 09:21:05
【问题描述】:

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

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...

谢谢和问候!

【问题讨论】:

    标签: python syntax tree grammar lark-parser


    【解决方案1】:

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

    function: NAME "(" params? ")"
    
    params: (NAME ","?)+
    

    Lark 有很多示例语法,例如 calculatorPythonLark (its own syntax)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      相关资源
      最近更新 更多