Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用纯python实现的编程语言_Python_Programming Languages_Interpreter - Fatal编程技术网

用纯python实现的编程语言

用纯python实现的编程语言,python,programming-languages,interpreter,Python,Programming Languages,Interpreter,我正在创建(研究)一个高度可定制的python客户端,并希望允许用户用另一种语言实际编辑代码,以定制程序的运行。(类似于浏览器,它本身用c/c++编码,运行另一种语言html/js)。所以我的问题是,是否有任何用纯python实现的编程语言可以作为参考(或直接使用?)——我需要简单的语言(简单语句和ifs可以) 编辑:对不起,如果我没有说清楚,但我想要的是“一种定制程序运行的语言”,尽管pypi似乎是一个很好的选择,但我想要的是更简单的,如果需要,我可以学习和扩展自己。我的谷歌搜索指向基于xml

我正在创建(研究)一个高度可定制的python客户端,并希望允许用户用另一种语言实际编辑代码,以定制程序的运行。(类似于浏览器,它本身用c/c++编码,运行另一种语言html/js)。所以我的问题是,是否有任何用纯python实现的编程语言可以作为参考(或直接使用?)——我需要简单的语言(简单语句和ifs可以)


编辑:对不起,如果我没有说清楚,但我想要的是“一种定制程序运行的语言”,尽管pypi似乎是一个很好的选择,但我想要的是更简单的,如果需要,我可以学习和扩展自己。我的谷歌搜索指向基于xml的语言。(BMEL、XForms等)

是对Python语法的修改,它是在Python本身的基础上构建的,使用stdlib中的。

公共Lisp(或任何其他Lisp)可能是该任务的最佳选择。因为Lisp可以使用强大的宏轻松地扩展宿主语言,并构建DSL(领域特定语言)。

问题的范围并不完全清楚,但我有一种预感,PyPy、嵌入其他完整语言以及类似的解决方案可能有些过火。听起来iamgopal可能真的对更像或的东西感兴趣

如果您想要支持的语言非常小(请参阅解释器模式链接),那么自己用Python手工编写代码就不会太难了。您可以编写一个简单的解析器(GoogleAround;下图),然后遍历AST并计算用户表达式


然而,如果你认为这会被很多人使用很长一段时间,那么用一种真正的语言来解决这个问题可能是值得的。(如果您的用户已经熟悉基本的Python语法,我建议您使用Python本身)。

为什么不使用Python本身?您可以谨慎地使用
eval
运行用户代码


解释脚本语言的一个好处是,您不需要另外一种脚本语言

如果您只需要简单的If语句和表达式,我相信解析每一行不会是一项糟糕的任务。差不多

if some flag
    activate some feature
    deactivate some feature
elif some other flag
    activate some feature
    activate some feature
else
    logout
只需编写一个类,在解析第一个单词时,检查它是否为“if,elif,else”等,如果是,则检查一个标志并设置一个标志,表明在下一个条件之前您正在执行或不正在执行。如果不是条件,则根据第一个关键字调用函数,该关键字将以某种方式修改程序状态

该类可以存储一些本地执行状态(我们在if语句中吗?如果是,我们在执行这个分支吗?),并拥有另一个包含一些全局应用程序状态(可由if语句检查的标志等)的类

在您的情况下,这样做可能是错误的(很容易出现错误,如果您没有正确处理脚本中的数据,这是很危险的),但如果您决定解释自己的迷你语言,这至少是一个开始

说真的,如果你尝试这个,要非常非常小心。不要给脚本任何他们不一定需要的功能,因为这样做几乎肯定会打开安全漏洞


不要说我没有警告过你。

为了你的用户着想,不要使用基于XML的语言——XML是编程语言的糟糕基础,你的用户会因此恨你

这里有一个建议。为您的语言使用严格的Python子集。使用将代码转换为抽象语法树,并在将AST转换为python字节码之前遍历该树以验证代码是否符合您的子集

注意:我刚刚检查了文档,发现编译器包在2.6中已被弃用,在Python 3.x中已被删除。有人知道为什么吗?


是您感兴趣的东西。

许多模板语言,如Cheetah、Django templates、Genshi、Mako、Mighty都可以作为一个例子。

您是否打算尝试在它们的代码和程序之间加强安全性?因为如果没有,,你可以只使用python。你可以只使用python本身吗?也许你真的不需要用python实现的语言-你可以在你的程序中链接/嵌入一种语言,这样它就可以用任何其他语言(如C)实现。我的主要目的是学习编写可定制和可插入的程序。编译器/解释器的规范问题参考文献:。我不知道这些都是用python编写的,但这是一个不重要的细节。我无法想象要求用户学习common lisp来配置我的应用程序。这就像给他们Emacs一样,只是稍微不那么痛苦。谁说你的用户需要学习CommonLisp?我的意思是,公共Lisp可以作为宿主语言,在其上可以构建自定义DSL。使用DSL客户可以定制你的应用程序。Ren'Py与其说是一种修改,不如说是一种单独的语言,它允许在源代码中嵌入Python,而且碰巧也是用Python编写的。在Ren'py源代码中的parser.py和ast.py文件中爬行显示了它的工作原理。我猜它的功能在parser和其他语言包中是重复的。