Skip to main content

tranp (TRANspiler on Python)

test codecov MIT License

概要

  • Pythonで実装されたトランスパイルフレームワーク
  • 入力言語のソースコードからAST(※1)を生成・解析し、テンプレート(※2)を介して出力言語のソースコードを出力するCLIツール
  • ※1: ASTの生成はLarkを利用(自由に変更可能)
  • ※2: テンプレートエンジンはJinja2を利用(自由に変更可能)

特徴

  • 入力・出力言語共に自由に選択できる設計(※1)
  • テンプレート(※2)を変更することで、コア実装を改変することなくレンダリング内容を自由に改変可能
  • 難読化されない可読なソースコードを生成
  • 型注釈の解析と型推論の組み合わせによる型の補完に対応
  • トランスパイルのリアルタイム変換(REPL)が可能
  • シンボル解析・AST解析のツールを付属
  • ※1: 現状はPythonからC++への変換のみ実装。新しい組み合わせは個別に実装が必要であり、決して容易ではない点に注意

必須要件

動作環境

  • Linux
  • Unix系(MacOSなど)
  • Windows ※1
  • ※1: WindowsではREPLが使用不可 (WSL/Git Bash等の互換環境を使用すれば可能)

インストール

$ pip install tranp

トランスパイル (Python to C++)

リアルタイム変換

  • -itオプションを指定して実行することでREPLが起動
$ tranp -it
  • Pythonコードを入力した後、空行を入力するとトランスパイル結果がレンダリング
==========
Code here. Type `exit` to quit:
a = 1
==========
Result:
----------
// @tranp.meta: {"version":"0.9.n","module":{"hash":"dummy","path":"__main__"},"transpiler":{"version":"0.9.n","module":"tranp.app.implements.cpp.transpiler.py2cpp.Py2Cpp"}}
#pragma once
int a = 1;
  • 再びPythonコードを入力することで、繰り返し結果を確認することが可能
==========
Code here. Type `exit` to quit:
def main() -> int:
  return 1
==========
Result:
----------
// @tranp.meta: {"version":"0.9.n","module":{"hash":"dummy","path":"__main__"},"transpiler":{"version":"0.9.n","module":"tranp.app.implements.cpp.transpiler.py2cpp.Py2Cpp"}}
#pragma once
/** main */
int main() {
  return 1;
}
  • exitのみ入力するとREPLが終了 (またはCtrl + C)
==========
Code here. Type `exit` to quit:
exit
Quit

一括変換

  • -cオプションでコンフィグを指定することで、設定に従って一括変換を行う
  • チュートリアルで順を追って解説
$ tranp -c path/to/config.yml

チュートリアル

  • 以下の様な構成のプロジェクトを用意
app/
  sub.py
  main.py
config.yml
# app/main.py
from app.sub import hello
def main() -> int:
  hello()
  return 1
# app/sub.py
def hello() -> None:
  print('hello world!')
# config.yml
grammar: ${tranp_dir}/data/grammar.lark
trans_mapping: ${tranp_dir}/data/i18n.yml
template_dirs:
  - ${tranp_dir}/data/cpp/template
input_globs:
  - app/**/*.py
exclude_patterns: []
output_dirs:
  - ./
output_language: cpp:h
env:
  transpiler:
    include_dirs:
      - app/
  view:
    immutable_param_types:
      - std::string
      - std::vector
      - std::map
      - std::function
  • トランスパイルを実行
$ tranp -c config.yml
  • トランスパイル後の配置
app/
  sub.py
  sub.h <- NEW!
  main.py
  main.h <- NEW!
config.yml
  • トランスパイル結果
// @tranp.meta: {"version":"0.9.n","module":{"hash":"6012cab9fec85852b56d7b7b8deb6bd9","path":"app.main"},"transpiler":{"version":"0.9.n","module":"tranp.app.implements.cpp.transpiler.py2cpp.Py2Cpp"}}
#pragma once
#include "sub.h"
/** main */
int main() {
	hello();
	return 1;
}
// @tranp.meta: {"version":"0.9.n","module":{"hash":"96178f75f71ca63c3102afc3e041a5af","path":"app.sub"},"transpiler":{"version":"0.9.n","module":"tranp.app.implements.cpp.transpiler.py2cpp.Py2Cpp"}}
#pragma once
/** hello */
void hello() {
	printf("hello world!");
}

解析ツール

AST解析ツール

  • astコマンドを指定して実行するとREPLが起動
  • ※終了方法はトランスパイラーと同様
$ tranp ast
  • Pythonコードを入力することでASTがレンダリング
  • ※出力結果はlarkのASTに依存
==========
Code here. Type `exit` to quit:
a = 1
==========
AST
----------
file_input
  assign
    assign_namelist
      var
        name  2
    number    1

シンボル解析ツール

$ tranp analyze

ドキュメント

ライセンス

  • MIT
  • tranpを用いて生成したトランスパイル後のソースコードに関してはライセンスに含まれません

Metadata

Release files for tranp 0.9.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tranp 0.9.13
File Size Uploaded
tranp-0.9.13.tar.gz 201.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tranp 0.9.13
File Interpreter ABI Platform
tranp-0.9.13-py3-none-any.whl Python 3 none any Details

Total release size: 510.8 kB

Release files / tranp-0.9.13.tar.gz

Download URL tranp-0.9.13.tar.gz
Size 201.4 kB
Tags Source
SHA-256 checksum
How to use checksums
895eaa09fcc0804402c1a2e9925938ec583fb91b569adaa1795e714f52d37939
BLAKE2b-256 checksum
How to use checksums
c66ad96417101f4a402becc2328e0d760814c9e6396d12da6c064c8d81d2a1e9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Release files / tranp-0.9.13-py3-none-any.whl

Download URL tranp-0.9.13-py3-none-any.whl
Size 309.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cc723c7628bcbb4450e8f19774a98df041ae5f76d13b366fbad6bd9bf06fdf11
BLAKE2b-256 checksum
How to use checksums
59196c97ebd887f6a1e569ec7ba467cebffd0b6e6f59b944fcb5b4cdf90e70ed
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.2

Release history Release notifications | RSS feed

This release

0.9.13 This release

2 release files

0.9.9

2 release files

0.9.8

2 release files

0.9.7

2 release files

0.9.6

2 release files

0.9.5

2 release files

0.9.4

2 release files

0.9.3

2 release files

0.9.2

2 release files

0.9.1

2 release files

0.9.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page