加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

解析ALMOST Python语言的最佳方法是什么?

发布时间:2020-12-20 13:20:50 所属栏目:Python 来源:网络整理
导读:我正在研究在 Python之上实现的特定于域的语言.语法非常接近Python,直到现在我们才进行了一些简单的字符串转换,然后将其转换为ast.例如,缩进由#endfor / #endwhile / #endif语句替换,因此我们将缩进标准化,同时它仍然是字符串. 我想知道是否有更好的方法?据
我正在研究在 Python之上实现的特定于域的语言.语法非常接近Python,直到现在我们才进行了一些简单的字符串转换,然后将其转换为ast.例如,缩进由#endfor / #endwhile / #endif语句替换,因此我们将缩进标准化,同时它仍然是字符串.

我想知道是否有更好的方法?据我所知,ast是硬解码来解析Python语法的,除了http://docs.python.org/library/ast.html#module-ast之外我找不到任何文档(我猜想源代码本身).

有没有人有PyParsing,ANTLR或PLY的个人经验?

有一些模糊的计划将解释器重写为将我们的语言转换为有效的Python并将其提供给Python解释器本身的东西,所以我想要与编译兼容的东西,但这不是一个交易破坏者.

更新:我刚刚想到了

from __future__ import print_function,with_statement

改变Python解析以下来源的方式.但是,PEP 236表明这是编译器功能的语法窗口修整.有人可以确认试图覆盖/扩展__future__不是我的问题的正确解决方案吗?

解决方法

PLY有效.这很奇怪,因为它模仿lex / yacc的方式不是非常pythonic.

lex和yacc都有一个隐式接口,可以将lex的输出作为独立程序运行.这个“功能”被精心保留.类似地,对于PLY的yacc样特征.创建一个奇怪的,隐含的独立主程序的“特征”被仔细保留.

但是,作为lex / yacc兼容工具集的PLY非常好.您的所有lex / yacc技能都会得到保留.

[编辑评论. “修复”Python的语法可能是浪费时间.几乎每个人都可以在没有任何帮助的情检查C,Java,C甚至Pascal代码,你会发现几乎每个人都可以缩进.实际上,人们不遗余力地在不需要的地方缩进Java.如果缩进在Java中不重要,为什么人们做得这么好呢?]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读