Pseudo利用一个算法/一个简单程序,然后在Python, JavaScript, C#, Go 和 Ruby 中生成为惯用代码。
Pseudo实现两层翻译:它采取目标
语言的语法
,可以使用Y语言的本地标准库表达出X语言的标准库的方法/API。
应用实例:
*
generate code for the same task/algorithm in different languages (parser generators etc)
*
port a library/codebase
*
develop core logic in one language and use it in other language codebases
*
write a compiler/dsl
*
bootstrap a codebase in another language / generate equivalent test suites in different languages
*
translate/support some algorithms in different languages
*
translate/support some text/data processing/command tool in different languages
安装
<pre class="brush:shell;toolbar: true; auto-links: false;">pip install pseudo #only python 3 supported
# probably you'd like to try the python-to-pseudo-to-js/go/etc compiler
pip install pseudo-python</pre>
用法
你可以在
Python中
直接使用Pseudo-Python生成
Pseudo
抽象语法树。
<pre class="brush:shell;toolbar: true; auto-links: false;">pseudo-python a.py # generates a.pseudo.yaml</pre>
然后翻译这个抽象语法树
<pre class="brush:shell;toolbar: true; auto-links: false;">pseudo a.pseudo.yaml go # or ruby / js / csharp / py / cpp</pre>
或者你也可以直接从python翻译成另一种语言
<pre class="brush:shell;toolbar: true; auto-links: false;">pseudo-python a.py b.rb # or c.cs
pseudo.generate(pseudo_ast, language)</pre>
为了快速实验,使用generate_main更容易生成
<pre class="brush:shell;toolbar: true; auto-links: false;">from pseudo import * # ok for a replprint(generate_main([
assignment(
local('a', 'Int'),
call(local('g'), [to_node(0), to_node('')], 'Int'))], 'rb'))
a = g(0, '')</pre>
未来的Pseudo可以添加一个Lisp的
DSL用于快速手动创建抽象语法树的节点,但目前
它的主要目标更加有用:消耗自动生成的
pseudo抽象语法树,然后将其转译为目标
语言。
- 授权协议:
- MIT
- 开发语言:
- C/C++ Python Ruby Google Go JavaScript 查看源码»
- 操作系统:
- 跨平台