Pseudo 自动算法转换 Pseudo

blov • 1338 次点击    
这是一个分享于 的项目,其中的信息可能已经有所发展或是发生改变。
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&#39;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(&#39;a&#39;, &#39;Int&#39;),     call(local(&#39;g&#39;), [to_node(0), to_node(&#39;&#39;)], &#39;Int&#39;))], &#39;rb&#39;)) a = g(0, &#39;&#39;)</pre> 未来的Pseudo可以添加一个Lisp的 DSL用于快速手动创建抽象语法树的节点,但目前 它的主要目标更加有用:消耗自动生成的 pseudo抽象语法树,然后将其转译为目标 语言。
授权协议:
MIT
开发语言:
C/C++ Python Ruby Google Go JavaScript 查看源码»
操作系统:
跨平台
1338 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传