【问题标题】:How to write a CFG with functions?如何编写带有函数的 CFG?
【发布时间】:2016-01-31 12:36:11
【问题描述】:

在一个作业中,我被要求为以下功能编写一个 CFG:

def f(x, y): 返回 x + y

def g(x, y): 返回 x - y

def h(x, y, z): 返回 x + y % z

def w(x, y, z): 返回 x * y – z

def h1(x, y, z): 返回 (x + y) % z

def h2(x, y, z): 返回 x + y % z

我尝试将其作为普通 CFG 进行处理,但是对于函数定义和函数体,我无法做到这一点。 我不太确定如何开始使用这种 CFG。

【问题讨论】:

    标签: grammar context-free-grammar context-free-language earley-parser


    【解决方案1】:

    这是一个糟糕的问题 - 您通常不能在 CFG 中对“仅在函数体中使用参数”的规则进行编码。但是,忽略这个小问题,我们可以尝试:

    S := def F (L): return E
    
    F := CN
    C := f | g | h | w
    N := (empty string) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
    
    L := X | XY
    X := x | y | z
    Y := , L
    
    E := X | E + E | E - E | E / E | E % E | E * E | (E)
    

    S 提供函数的整体结构。 F 定义函数名称的制作方式。 L 定义如何制作变量列表。 E 定义了如何制作涉及变量和运算符的表达式。请注意,这将允许 def f(x): return y 之类的内容,但您无法在 CFG 中阻止它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-21
      • 1970-01-01
      • 2016-06-21
      • 2013-04-02
      • 1970-01-01
      相关资源
      最近更新 更多