Skip to main content

tranp (TRANspiler on Python)

test codecov MIT License

概要

  • Pythonによるトランスパイルフレームワークの実装
  • 入力言語のAST(※1)を元に、出力言語のソースコードをレンダリング
  • ※1: ASTの生成はlarkを利用(自由に変更可能)

特徴

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

必須要件

  • Python 3.13
  • Lark 1.3.1
  • Jinja2 3.1.4
  • PyYAML 6.0.2

インストール

$ 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.10

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.10
File Size Uploaded
tranp-0.9.10.tar.gz 199.2 kB Details

Built distribution (wheel)

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

Total release size: 505.6 kB

Release files / tranp-0.9.10.tar.gz

Download URL tranp-0.9.10.tar.gz
Size 199.2 kB
Tags Source
SHA-256 checksum
How to use checksums
50cebc52da0a5191c2dd1b4c6086807d44b646af7b7ac43e15211749ec496ef9
BLAKE2b-256 checksum
How to use checksums
c294404a89accb9e249084f7e161353b23d6febb218e05eb7ea398f22bf0896e
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.10-py3-none-any.whl

Download URL tranp-0.9.10-py3-none-any.whl
Size 306.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
532fdbaf445972b74676fc8c5bb0dd264d98aaa6a59139dc2b6bfe0e2676a08f
BLAKE2b-256 checksum
How to use checksums
6f038bfc5e5b5953fb0a591f804d32dd25752fd2a21a7fa191bebfbba9e77b7d
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.10 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