「PIONEチュートリアル-PNML」の版間の差分
(→基本1(特定のファイルを出力する)) |
|||
行41: | 行41: | ||
では、[[PIONEチュートリアル#基本1(特定のファイルを出力する)]]と同様にHelloプログラムを作ってみましょう。<br> | では、[[PIONEチュートリアル#基本1(特定のファイルを出力する)]]と同様にHelloプログラムを作ってみましょう。<br> | ||
<br> | <br> | ||
− | まず、下記のようなHelloWorld. | + | まず、下記のようなHelloWorld.pnmlを作成します。このとき出力ファイルの">"はMain Ruleにおける出力を指しています。("<"はMain Ruleの入力)<br> |
[[画像:PIONE-PNML-Basic1.png]]<br> | [[画像:PIONE-PNML-Basic1.png]]<br> | ||
<br> | <br> |
2014年11月4日 (火) 03:09時点における版
PIONEは、直接、pione定義書を記述する事もできますが、PNMLを用いて、ペトリネットの形式で記述することもできます. WoPeD(推奨)により、ペトリネットを記述し、PNML形式で保存します。それぞれのアクションは、マークダウン形式で記述する事ができます.
WoPeDを使ったpione定義書の作成
ここではWoPeDを使って、PNMLファイルを作成し、pione定義書を作成するチュートリアルを行います。
まず、WoPeDを起動し、新規作成するためにFileのNewを選択します。
新規作成したファイル内のProcess上で右クリックすると、アイテムを選択することができます。
pione定義書を作成する上では上部2つの"○"(Place)と"□"(Transition)を使用します。主に"○"(Place)はファイルなどの入出力データを指し、"□"(Transition)はRuleなどの処理を指します。そして、"○"(Place)と"□"(Transition)の間をドラッグ操作による矢印(Annotation)でつなぐと、入力ファイルからある処理を経て出力ファイルを作成するフローが完成します。
WoPeDでフローを作成したら、次は"□"(Transition)の中身を作成します。こちらは下記のようなマークダウン形式によるテキストファイルを作成します。##が意味持っていることに注意して下さい。
## Transition名 ここにコメントを記述することができます。 ``` Transition内のAction ``` ## 次のTransition名 . . .
PNMLファイルとアクション定義ファイルを作成した後は下記のコマンドによって、pione定義書へコンパイルすることができます。
$ pione compile (pnmlファイル) --action (アクション定義ファイル) > (pione定義書ファイル名)
基本1(特定のファイルを出力する)
では、PIONEチュートリアル#基本1(特定のファイルを出力する)と同様にHelloプログラムを作ってみましょう。
まず、下記のようなHelloWorld.pnmlを作成します。このとき出力ファイルの">"はMain Ruleにおける出力を指しています。("<"はMain Ruleの入力)
次に下記のようなHelloWorld.mdを作成します。
# HelloWorld.pione ## Hello Here, you can write Comment. ``` echo "Hello PIONE world !" > {$O[1]} ```
最後にコンパイルを行います。
pione compile HelloWorld.pnml --action HelloWorld.md > HelloWorld.pione
コンパイル後のpione定義書
Rule Main output 'message.txt' Flow rule Hello End Rule Hello output 'message.txt' Action echo "Hello PIONE world !" > {$O[1]} End
ActionがMainではなくHelloのルールへ記述されていますが、PIONEチュートリアル#基本1(特定のファイルを出力する)と同様の機能を持つファイルHelloWorld.pioneが作成されました。
実行結果
/Basic1$ pione-client HelloWorld.pione -b HelloWorld ==> &Anonymous:Root([],{}) --> Rule Application: &Anonymous:Root([],{}) --> Distribution: &Anonymous:Root([],{}) >>> &Anonymous:Main([],{}) ==> &Anonymous:Main([],{}) --> Rule Application: &Anonymous:Main([],{}) --> Distribution: &Anonymous:Main([],{}) >>> &Anonymous:Hello([],{}) ==> &Anonymous:Hello([],{}) SH ------------------------------------------------------------ SH echo "Hello PIONE world !" > message.txt SH ------------------------------------------------------------ <== &Anonymous:Hello([],{}) <-- Distribution: &Anonymous:Main([],{}) <-- Rule Application: &Anonymous:Main([],{}) <-- Distribution: &Anonymous:Root([],{}) <== &Anonymous:Main([],{}) <-- Rule Application: &Anonymous:Root([],{}) <== &Anonymous:Root([],{}) /Basic1$ cat HelloWorld/output/message.txt Hello PIONE world !
同様にHelloWorld/output/message.txt へHello PIONE world !が出力されています。