纯Python中实现的编程语言

时间:2010-03-21 07:46:30

标签: python programming-languages interpreter

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

编辑:抱歉,如果我没有说清楚,但我想要的是“一种定制程序运行的语言”,即使pypi似乎是一个很好的选择,我正在寻找的更简单,我可以学习和如果需要,伸展自己。我的谷歌搜索指向基于xml的langagues。 (BMEL,XForms等)。

8 个答案:

答案 0 :(得分:4)

关于范围的问题并不完全清楚,但我预感到PyPy,嵌入其他完整语言和类似的解决方案可能会有点过分。听起来iamgopal可能真的对Interpreter PatternLittle Language更感兴趣。

如果你想支持的语言非常小(参见解释器模式链接),那么用Python自己手工编写代码并不会太难。您可以编写一个简单的解析器(Google周围;这里是one example),然后遍历AST并评估用户表达式。

但是,如果您希望长时间使用或许多人使用,可能值得在问题上使用真正的语言。 (如果您的用户已经熟悉基本的Python语法,我会推荐Python本身。)

答案 1 :(得分:3)

Ren'Py是对Python本身构建的Python语法的修改,使用stdlib中的language tools

答案 2 :(得分:3)

为了您的用户,不要使用基于XML的语言 - XML是编程语言的一个糟糕的基础,您的用户会讨厌它。

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

N.B。我刚检查了文档,看到编译器包在2.6中已弃用,并在Python 3.x中删除。有谁知道为什么会这样?

答案 3 :(得分:1)

为什么不是Python本身?您可以使用eval来运行用户代码。

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

答案 4 :(得分:1)

<强> PLY (Python Lex-Yacc)  是你感兴趣的东西。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

可能Common Lisp(或任何其他Lisp)将是该任务的最佳选择。因为Lisp可以通过强大的宏轻松扩展宿主语言并构建DSL(特定于域的语言)。

答案 7 :(得分:0)

如果你需要的只是语句和表达式的简单,我相信解析每一行并不是一个糟糕的任务。像

这样的东西
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语句检查的标志等)。 / p>

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

说真的,如果你试试这个,那就非常,非常谨慎。不要给脚本任何他们不肯定需要的功能,因为你几乎肯定会通过做这样的事情来打开安全漏洞。

不要说我没有警告你。