「PIONE定義書」の版間の差分
(→入力定義) |
|||
行39: | 行39: | ||
==== 出力定義 ==== | ==== 出力定義 ==== | ||
+ | output 'XXX.YYY'といったように定義します。[[#入力定義]]と同様{$O[N]}や{$O[N][M]}としてルール内で使用することができます。<br> | ||
<br> | <br> | ||
行52: | 行53: | ||
==== アクション定義 ==== | ==== アクション定義 ==== | ||
+ | ActionとEndで挟んで記述します。この間の記述は基本的に[[シェルスクリプト]]です。但し、[[#条件定義]]で記述した入出力や変数などを使用するときはルール内の記述に従って、{$I[N]}, {$O[N][M]}, {$val}などのように記述します。<br> | ||
<br> | <br> | ||
==== フロー定義 ==== | ==== フロー定義 ==== | ||
+ | FlowとEndで挟んで記述します。この間の記述は[[PIONE]]の記法になりますので、[[#アクション定義]]と混同しないように注意が必要です。[[#変数束縛文]]、[[#ルール呼び出し文]、[[#条件処理文]]を必要に応じて記述します。<br> | ||
+ | <br> | ||
+ | |||
+ | ===== 変数束縛文 ===== | ||
+ | このルールで使用する変数に値を設定します。<br> | ||
+ | <br> | ||
+ | |||
+ | ===== ルール呼び出し文 ===== | ||
+ | rule (ルール名)として他のルールを呼び出します。<br> | ||
+ | <pre> | ||
+ | rule SubRule1 | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | ===== 条件処理文 ===== | ||
+ | パラメータなどを用いた条件処理にてフロー制御します。条件処理には[[#if文]]と[[#case文]]があります。使用する式については[[PIONEの式]]をご覧下さい。<br> | ||
+ | <br> | ||
+ | |||
+ | ====== if文 ====== | ||
+ | ifやelseを使用します。文の終わりにはendを使用します。<br> | ||
+ | <pre> | ||
+ | if {$val} <= 100 | ||
+ | rule Sub1 | ||
+ | else | ||
+ | rule Sub2 | ||
+ | end | ||
+ | </pre> | ||
+ | <br> | ||
+ | |||
+ | ====== case文 ====== | ||
+ | caseやwhen, elseを使用します。文の終わりにはendを使用します。<br> | ||
+ | <pre> | ||
+ | case {$mode} | ||
+ | when 1 | ||
+ | rule Abc | ||
+ | when 2 | ||
+ | rule Def | ||
+ | else | ||
+ | rule Ghi | ||
+ | end | ||
+ | </pre> | ||
<br> | <br> |
2014年12月11日 (木) 00:39時点における版
ここでは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