「PIONEチュートリアル-PNML」の版間の差分

提供: Eospedia
移動: 案内検索
行6: 行6:
 
<br>
 
<br>
  
=== 基本1(特定のファイルを出力する)===
+
まず、[[WoPeD]]を起動し、新規作成するためにFileのNewを選択します。<br>
 まずは[[PIONEチュートリアル#基本1(特定のファイルを出力する)]]と同様にHelloプログラムを作ってみましょう。<br>
+
<br>
+
[[WoPeD]]を起動し、新規作成するためにFileのNewを選択します。<br>
+
 
新規作成したファイル内のProcess上で右クリックすると、アイテムを選択することができます。<br>
 
新規作成したファイル内のProcess上で右クリックすると、アイテムを選択することができます。<br>
 
[[画像:PIONE-PNML-WoPeD1.png]]<br>
 
[[画像:PIONE-PNML-WoPeD1.png]]<br>
 
<br>
 
<br>
[[pione定義書]]を作成する上では上部2つの"○"(Place)と"□"(Transition)を使用します。主に"○"(Place)はファイルなどの入出力データを指し、"□"(Transition)はRuleなどの処理を指します。<br>
+
[[pione定義書]]を作成する上では上部2つの"○"(Place)と"□"(Transition)を使用します。主に"○"(Place)はファイルなどの入出力データを指し、"□"(Transition)はRuleなどの処理を指します。そして、"○"(Place)と"□"(Transition)の間をドラッグ操作による矢印(Annotation)でつなぐと、入力ファイルからある処理を経て出力ファイルを作成するフローが完成します。<br>
 
[[画像:PIONE-PNML-WoPeD2.png]]<br>
 
[[画像:PIONE-PNML-WoPeD2.png]]<br>
 
<br>
 
<br>
  
 +
[[WoPeD]]でフローを作成したら、次は"□"(Transition)の中身を作成します。こちらは下記のようなマークダウン形式によるテキストファイルを作成します。##が意味持っていることに注意して下さい。<br>
 +
<pre>
 +
## Transition名
  
 +
ここにコメントを記述することができます。
  
== [[PNML]]から[[pione定義書]]へのコンパイル ==
+
```
 +
Transition内のAction
 +
```
  
$ pione compile CountChar.pnml --action Action.md
+
## 次のTransition名
 +
.
 +
.
 +
.
  
== ==
+
</pre>
 +
<br>
 +
 
 +
[[PNML]]ファイルとアクション定義ファイルを作成した後は下記のコマンドによって、[[pione定義書]]へコンパイルすることができます。<br>
 +
<pre>
 +
$ pione compile (pnmlファイル) --action (アクション定義ファイル) > (pione定義書ファイル名)
 +
</pre>
 +
<br>
 +
 
 +
=== 基本1(特定のファイルを出力する)===
 +
 では、[[PIONEチュートリアル#基本1(特定のファイルを出力する)]]と同様にHelloプログラムを作ってみましょう。<br>
 +
<br>
 +
まず、下記のようなHelloWorld.pnmlを作成します。<br>
 +
[[画像:PIONE-PNML-Basic1.png]]<br>
 +
<br>
 +
次に下記のようなHelloWorld.mdを作成します。<br>
 +
<pre>
 +
# HelloWorld.pione
 +
 
 +
## Hello
 +
Here, you can write Comment.
 +
 
 +
 
 +
```
 +
echo "Hello PIONE world !" > {$O[1]}
 +
```
 +
 
 +
</pre>
 +
<br>
 +
 
 +
最後にコンパイルを行います。<br>
 +
<pre>
 +
pione compile HelloWorld.pnml --action HelloWorld.md > HelloWorld.pione
 +
</pre>
 +
<br>
 +
 
 +
コンパイル後の[[pione定義書]]<br>
 +
<pre>
 +
 
 +
Rule Main
 +
  output 'message.txt'
 +
Flow
 +
  rule Hello
 +
End
 +
 
 +
Rule Hello
 +
  output 'message.txt'
 +
Action
 +
  echo "Hello PIONE world !" > {$O[1]}
 +
End
 +
 
 +
</pre>
 +
<br>
 +
 
 +
ActionがMainではなくHelloのルールへ記述されていますが、[[PIONEチュートリアル#基本1(特定のファイルを出力する)]]と同様の機能を持つファイルHelloWorld.pioneが作成されました。<br>
 +
<br>
 +
 
 +
実行結果<br>
 +
<pre>
 +
/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 !
 +
</pre>
 +
同様にHelloWorld/output/message.txt へHello PIONE world !が出力されています。
 +
<br>

2014年11月4日 (火) 03:06時点における版

PIONEは、直接、pione定義書を記述する事もできますが、PNMLを用いて、ペトリネットの形式で記述することもできます. WoPeD(推奨)により、ペトリネットを記述し、PNML形式で保存します。それぞれのアクションは、マークダウン形式で記述する事ができます.

WoPeDを使ったpione定義書の作成

 ここではWoPeDを使って、PNMLファイルを作成し、pione定義書を作成するチュートリアルを行います。

まず、WoPeDを起動し、新規作成するためにFileのNewを選択します。
新規作成したファイル内のProcess上で右クリックすると、アイテムを選択することができます。
PIONE-PNML-WoPeD1.png

pione定義書を作成する上では上部2つの"○"(Place)と"□"(Transition)を使用します。主に"○"(Place)はファイルなどの入出力データを指し、"□"(Transition)はRuleなどの処理を指します。そして、"○"(Place)と"□"(Transition)の間をドラッグ操作による矢印(Annotation)でつなぐと、入力ファイルからある処理を経て出力ファイルを作成するフローが完成します。
PIONE-PNML-WoPeD2.png

WoPeDでフローを作成したら、次は"□"(Transition)の中身を作成します。こちらは下記のようなマークダウン形式によるテキストファイルを作成します。##が意味持っていることに注意して下さい。

## Transition名

ここにコメントを記述することができます。

```
Transition内のAction
```

## 次のTransition名
.
.
.


PNMLファイルとアクション定義ファイルを作成した後は下記のコマンドによって、pione定義書へコンパイルすることができます。

$ pione compile (pnmlファイル) --action (アクション定義ファイル) > (pione定義書ファイル名)


基本1(特定のファイルを出力する)

 では、PIONEチュートリアル#基本1(特定のファイルを出力する)と同様にHelloプログラムを作ってみましょう。

まず、下記のようなHelloWorld.pnmlを作成します。
PIONE-PNML-Basic1.png

次に下記のような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 !が出力されています。