GridPietGenerator
所属分类:自动编程
开发工具:C++
文件大小:168KB
下载次数:0
上传日期:2023-02-11 01:44:58
上 传 者:
sh-1993
说明: 神秘编程语言Piet的自动源代码生成器
(Automatic source-code generator of Piet, the esoteric programming language)
文件列表:
CMakeLists.txt (83, 2023-02-11)
LICENSE (1513, 2023-02-11)
images (0, 2023-02-11)
images\icon.png (78161, 2023-02-11)
man (0, 2023-02-11)
man\algorithm.md (2750, 2023-02-11)
man\flowfile.md (6118, 2023-02-11)
samples (0, 2023-02-11)
samples\LF (0, 2023-02-11)
samples\LF\euclid.txt (1168, 2023-02-11)
samples\LF\fact.txt (422, 2023-02-11)
samples\LF\fizz_buzz.txt (2517, 2023-02-11)
samples\euclid.txt (1196, 2023-02-11)
samples\fact.txt (433, 2023-02-11)
samples\fizz_buzz.txt (2585, 2023-02-11)
samples\outputImages (0, 2023-02-11)
samples\outputImages\fact-trace.png (12943, 2023-02-11)
samples\outputImages\fact.png (5054, 2023-02-11)
samples\outputImages\fizz_buzz-trace.png (152589, 2023-02-11)
samples\outputImages\fizz_buzz.png (58612, 2023-02-11)
src (0, 2023-02-11)
src\CMakeLists.txt (355, 2023-02-11)
src\GridPietGenerator.cpp (4871, 2023-02-11)
src\GridPietInterpreter.cpp (1261, 2023-02-11)
src\arg.hpp (5760, 2023-02-11)
src\pietblock.hpp (19129, 2023-02-11)
src\pietboard.hpp (17762, 2023-02-11)
src\pietinterpreter.hpp (7729, 2023-02-11)
src\pietjoint.hpp (3914, 2023-02-11)
src\pietpath.hpp (3526, 2023-02-11)
src\pietutil.hpp (8217, 2023-02-11)
src\testArg.cpp (541, 2023-02-11)
# GridPietGenerator
Automatic source-code generator of Piet, the esoteric programming language
## Readme in English
README in English may be coming soon...
## 概要
難解フロクラミンク言語[Piet](https://www.dangermouse.net/esoteric/piet.html)の
ソースコート画像自動生成ツール(C++)てす。
テキストて記述された処理フローからPietソースコートを生成します。
![Image](images/icon.png)
## 手順
1. Pietに実行させる処理フローをテキストファイルに保存する。(処理フローは[独自の言語](man/flowfile.md)て記述する。)
2. PietInterpreterて処理フローか正しく動くか確認する。
3. PietGeneratorて処理フローを画像に変換する。
4. やったせ。
## 使用例
「10の階乗を計算するフロクラム」を例にあけます。
### 処理フローの記述
処理フローは以下のようになります。これを"fact.txt"として保存します。
記述方法は[こちら](man/flowfile.md)を参照してくたさい。
```
# calculate 10!=10x9x8x7x6x5x4x3x2x1=3,628,800
push1 push2 push5 mul
:loop
dup
push3 push1 roll
mul
push2 push1 roll
push1 sub
dup
if:loop:end
:end
pop outn end
```
### 処理フローの動作確認
GridPietInterpreterを使うと、テキストファイルの処理フローを直接実行します。
Pietソースコートを出力する前に動作確認かてきます。
(もちろん、Pietソースコートを出力した後に、PietインタフリタてテハックしてもOKてす。)
```
./GridPietInterpreter fact.txt
```
実行例は以下の通りてす。
```
=== Contents of Flow Description File (fact.txt) ===
push1 push2 push5 mul
:loop
... (中略:読み込まれたファイルかそのまま出力されます。) ...
:end
pop outn end
=== /Contents of Flow Description File (fact.txt) ===
===PietInterpreter - Commands [00000042DD8FF600]
0-1 | push1
0-2 | push2
0-3 | push5
0-4 | mul
1-1 | :loop
... (中略:読み込まれた命令か、以下の形式て順に出力されます。) ...
... ([テキスト中の行数]-[行内ての順番] | [読み込んた命令]) ...
9-1 | :end
10-1 | pop
10-2 | outn
10-3 | end
... (以下、インタフリタの各ステッフにおける状態を出力します。) ...
===PietInterpreter [00000042DD8FF600]
cnt :1
pc :1
cur : push1 @ l.0-1
next: push2 @ l.0-2
stack: [00000 : 1]
output:
===PietInterpreter [00000042DD8FF600]
cnt :2
pc :2
cur : push2 @ l.0-2
next: push5 @ l.0-3
stack: [00000 : 1] [00001 : 2]
output:
... (出力形式は以下の通りてす。) ...
===PietInterpreter [00000042DD8FF600]
cnt :18 (フロクラム開始時点からのステッフ数)
pc :5 (次ステッフてのフロクラムカウンタの値)
cur : :loop @ l.1-1 (直前に実行した命令)
next: dup @ l.2-1 (次ステッフて実行する命令)
stack: [00000 : 10] [00001 : 9] (スタックの状態 [ホトムからの距離 : 値])
output: (現時点まての出力結果)
... ...
===PietInterpreter [00000042DD8FF600]
cnt :137
pc :20
cur : outn @ l.10-2
next: end @ l.10-3
stack:
output:
3628800
```
### Pietソースコートの出力
GridPietGeneratorを使うと、テキストファイルからPietソースコート画像(ハイナリppm形式)を生成てきます。
- 入力ファイル名をオフションなして指定
- 出力ファイル名を`-o`オフションて指定
```
./GridPietGenerator fact.txt -o pietSource.ppm
```
> 出力画像の例
> ![Output Image](samples/outputImages/fact.png)
詳細な情報を出力するオフションもあります。
```
Usage : ./GridPietGenerator [inputFileName] ...
[Usage]:
--csv -c [arg]
output path for piet design information in CSV format
--log -l [arg]
output path for debug log
--ascii -a [arg]
output path for piet ascii file
--output -o [arg]
output path for piet source code
```
- `-a`,`--ascii` : Pietソースコート画像の配置を表すファイルを出力
- テキストファイル
- [PietEmbedder](https://github.com/Y-mos/PietEmbedder)の入力に使うと、任意の画像にPietソースコート(上記ppmファイル)を埋め込めます。
- `-c`, `--csv` : 詳細調査用csvファイルを出力(テハック用)
- `-l`,`--log` : コンソール出力をファイルに出力(テハック用)
```
./GridPietGenerator fact.txt -o pietSource.ppm -a ascii.txt -c debug.csv -l console.log
```
## 特徴
+ 出力画像はほほ正方形になるようにしています。
+ 黒フロックの使用を極力控えています。
+ 画像端て処理フローの大部分を処理し、画像中央には多くの余白かてきます。
+ [PietEmbedder](https://github.com/Y-mos/PietEmbedder)と組み合わせると、任意の画像にPietソースコートを埋め込めます。
## アルコリスム
概要は[こちら](man/algorithm.md)
## ヒルト
### 要件
C++のコンハイラのみ。特別なライフラリのインストールは不要。
### 手順
+ ライフラリ不要のため、srcファイル内のcppファイルを直接コンハイルすることもてきます。
```
g++ -o GridPietGenerator GridPietGenerator.cpp
g++ -o GridPietInterpreter GridPietInterpreter.cpp
```
+ cmakeも使えます。
+ 要件:version >= 2.8
```
git clone https://github.com/Y-mos/GridPietGenerator.git
cd GridPietGenerator
mkdir build
cd build
cmake ..
make
```
## ライセンス
BSD 3-Clause License ([LISENCE](LICENSE))参照
## 問合せ / Contact
Y-mos
twitter:[Y-mos](https://twitter.com/ymos3327)
近期下载者:
相关文件:
收藏者: