代码之家  ›  专栏  ›  技术社区  ›  Wang

解析几乎是python语言的最佳方法?

  •  4
  • Wang  · 技术社区  · 14 年前

    我正在研究一种在python之上实现的特定于领域的语言。语法与python非常接近,到目前为止,我们只是做了一些简单的字符串转换,然后将其输入 ast . 例如,缩进替换为 #endfor / #endwhile / #endif 语句,因此我们在缩进仍然是字符串时将其规范化。

    我想知道有没有更好的办法?据我所知, AST 是解析python语法的硬编码,除了 http://docs.python.org/library/ast.html#module-ast (我想还有消息来源本身)。

    有没有人对pyparsing、antlr或ply有个人经验?

    有一个模糊的计划要把解释器重写成某种东西,将我们的语言转换成有效的python,并将其输入python解释器本身,所以我想要一些与 compile ,但这不是一个交易破坏者。

    更新: 我突然想到

    from __future__ import print_function, with_statement
    

    更改python解析以下源代码的方式。然而, PEP 236 建议这是编译器功能的语法窗口修整。是否有人能确认试图覆盖/扩展 __future__ 不是解决我问题的正确方法吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   S.Lott    14 年前

    铺层工程。这很奇怪,因为它模仿lex/yacc的方式并不可怕的蟒蛇。

    lex和yacc都有一个隐式接口,可以将lex的输出作为独立程序运行。这个“特征”被仔细地保存了下来。类似于帘布层的yacc特性。创建一个奇怪的、隐式的独立主程序的“特性”被小心地保存下来。

    然而,ply作为lex/yacc兼容的工具集是相当不错的。你所有的lex/yacc技能都保留下来了。

    [编辑评论]。修改“python的语法可能是浪费时间。几乎每个人都可以在没有任何帮助的情况下正确缩进。检查C、JAVA、C++和Pascal代码,你会发现几乎每个人都可以很好地缩进。事实上,人们不遗余力地在不需要的地方缩进Java。如果缩进在Java中不重要,为什么人们做得这么好呢?]