用于lambda演算的Python解析器

问题描述 投票:1回答:2

为了好玩,我想为无类型的Lambda演算编写一个解析器。最简单的方法可能是写一个手写的解析器,但我想知道是否有更多的Pythonic方式?具体来说,我想使用一个Python库,将语言的语法描述转换为解析器。这是语言的BNF定义:

<term> ::= <var>
        |  <term> <term>
        |  λ <var> <term>

为简单起见,我省略了禁忌规则。应用程序关联到左侧,以便x y z(x y) z

什么Python库可以采用上面的语法描述,或者从它派生的一些语法(如我所说,语法是模糊的和左递归的,因此实现起来并不简单),并产生一个解析器?我想看看它是如何使用代码完成的,所以请不要只回答“pyparsing可以做到”。请按以下方式编写代码:

>>> G = """syntax description here..."""
>>> parser = build.the_parser(G)
>>> parser.parse("λ x. (y z)")
Abs('x', App(Id('x', Id('y'))))

最后一行是生成的抽象语法树。 Abs代表抽象(lambda),App代表应用程序,Id代表标识符。我认为PEG packrat解析器生成器在这里运行良好。

python parsing lambda-calculus peg
2个回答
© www.soinside.com 2019 - 2024. All rights reserved.