「PIONE定義書」の版間の差分
(→フロー定義) |
|||
行57: | 行57: | ||
==== フロー定義 ==== | ==== フロー定義 ==== | ||
− | FlowとEndで挟んで記述します。この間の記述は[[PIONE]]の記法になりますので、[[#アクション定義]]と混同しないように注意が必要です。[[#変数束縛文]]、[[#ルール呼び出し文]、[[#条件処理文]]を必要に応じて記述します。<br> | + | FlowとEndで挟んで記述します。この間の記述は[[PIONE]]の記法になりますので、[[#アクション定義]]と混同しないように注意が必要です。[[#変数束縛文]]、[[#ルール呼び出し文]]、[[#条件処理文]]を必要に応じて記述します。<br> |
<br> | <br> | ||
2014年12月11日 (木) 00:41時点における版
ここではPIONEの定義書における基本的な記述ルールを示します。具体的な記述や動作についてはPIONEチュートリアルをご覧下さい。厳密な定義などはこちらのpione-docをご覧下さい。
目次
ルールの記述方法
ルール内は大きく#ルールヘッダーと#条件定義と#振る舞い定義に分かれます。#ルールヘッダーはルール名を宣言し、#条件定義は入力ファイルや出力ファイル、パラメータなど、#振る舞い定義はその条件に対する処理を定義します。
ルールヘッダー
Ruleを使用してルール名を宣言します。ここで、Mainは特殊な宣言で実行時に最初に実行されるルールですので、注意して下さい。
条件定義
条件定義では#入力定義、#出力定義、#パラメータ定義、#特性定義を必要に応じてそれぞれ記述します。
入力定義
input 'XXX.YYY'といったように定義します。このように定義するとそのルール内であればどこでも{$I[N]}として使用できるようになります。ここでNは入力定義されている順番を指します。例えば、
input 'abc.def' input 'ghi.jkl' input 'mno.pqr'
上記の場合は{$I[1]}が'abc.def'を、{$[2]}が'ghi.jkl'を指します。
さらに、*(アスタリスク)を任意の文字として使用することができます。このときの任意の文字列を取り出す場合は{$[N][M]}として使用します。ここでNは入力定義の順番、Mはinputで定義したフォーマットで左から数えた*に該当する文字列となります。但し、*の間にある区切り文字(下記ではピリオド)は右から判定します。例えば、ディレクトリに
ab.cd.ef gh.ij.kl mn.op.qr
の3つのファイルがあったとします。このとき入力定義にて
input '*.*.*' input '*.*.ef' input '*.*'
上記の場合は{$[1][3]}がそれぞれef, kl, qrとなり、{$I[2][1]}はab、{$I[3][1]}はそれぞれab.cd, gh.ij, mn.opとなります。
出力定義
output 'XXX.YYY'といったように定義します。#入力定義と同様{$O[N]}や{$O[N][M]}としてルール内で使用することができます。
パラメータ定義
特性定義
振る舞い定義
振る舞い定義では#アクション定義もしくは#フロー定義のいずれかを記述します。
アクション定義
ActionとEndで挟んで記述します。この間の記述は基本的にシェルスクリプトです。但し、#条件定義で記述した入出力や変数などを使用するときはルール内の記述に従って、{$I[N]}, {$O[N][M]}, {$val}などのように記述します。
フロー定義
FlowとEndで挟んで記述します。この間の記述はPIONEの記法になりますので、#アクション定義と混同しないように注意が必要です。#変数束縛文、#ルール呼び出し文、#条件処理文を必要に応じて記述します。
変数束縛文
このルールで使用する変数に値を設定します。
ルール呼び出し文
rule (ルール名)として他のルールを呼び出します。
rule SubRule1
条件処理文
パラメータなどを用いた条件処理にてフロー制御します。条件処理には#if文と#case文があります。使用する式についてはPIONEの式をご覧下さい。
if文
ifやelseを使用します。文の終わりにはendを使用します。
if {$val} <= 100 rule Sub1 else rule Sub2 end
case文
caseやwhen, elseを使用します。文の終わりにはendを使用します。
case {$mode} when 1 rule Abc when 2 rule Def else rule Ghi end