仕様
予約語
char int float double short long void
unsigned signed const volatile
static extern auto register
if else while do for
switch case default
break continue goto
return
struct union enum typedef
追加予約語
print
flow init final kill
wait event alway next
予約変数
$flow_id $last_flow_id $event_no
$event_param1 $event_param2
プリプロセス用予約語
#include #define #undef #if #elif #else #endif
#ifdef #ifndef
#error #line #pragma
defined
__FILE__ __LINE__ __DATE__ __TIME__
演算子
+ - * / % & | ^ && || ! ~ << >> < > -> . ( ) [] ,
? :
sizeof
= += -= *= /= %= $= |= ^= != == >= <= <<= >>=
数値表現(C言語に準拠?)
整数、実数、16進数整数、8進整数
文字列
"ABC"
文字
'a'
C言語の文法で未実装なもの
- const,register,auto,volatile
C言語としての意味が無視されます。
現時点ではfloatとして処理されます。
実装未定
- 構造体、共用体自体をパラメータや戻り値としては扱えません
ポインタでやり取りしてください。
C言語の文法で解釈が異なるもの
概ねC言語と同じですが、内部ブロック{}からアクセスできるように
静的領域にメモリが確保されます。
C言語側で実装している関数および変数を宣言するときに使用します。
ここでのサンプルはmain関数のないC言語みたいなものです。
- サンプル1 変数に値を代入して標準出力に出してみる
int i;
i = 1;
print i;
int i, j;
float fa[2][2];
for(i = 0; i < 2; i++)
for(j = 0; j < j; j++)
fa[i][j] = i*2+j;
for(i = 0; i < 2; i++)
for(j = 0; j < j; j++)
print fa[i][j];
int func(int i, int j)
{
return i*j;
}
print func(1, 2);
typedef struct X {
int i;
float f;
} X;
X x = {1, 2.0f};
// 1行に出力する場合の書式
print "x.i=" print x.i print " x.f=" print x.f;
擬似スレッド
flow statement;
flow { statements }
print "1";
thread {
print "4" ;
init {
print "2";
}
print "5" ;
final {
print "9";
}
print "6";
delay(1);
print "8";
}
print "3" ;
delay(1);
print "7";
delay(1);
print "10";
初期化処理
init statement;
init { statements }
flowを生成した時に実行する文
flow {
int i;
init {
i = 0;
}
}
flow内変数などの初期化処理として使用します。
flow内処理は通常生成時点での他のスレッドの最後で処理されますので、
生成時に初期化しておきたい処理などを記述します。
ただし、init 文内では遅延命令(delay, wait等)は使えません。
??? (注)記述的にはinit文の初期化後に初期化文が実行される?
int i = 1;
init {
i = 0;
}
if(i == 1)
pintr "i == 1"; // こちらが処理される
else
pintr "i == 0";
最終処理
final statement;
final { statements }
flow文が最後に実行する文
flow {
void* p = NULL;
// :
final {
if(p)
free(p); // メモリ開放命令など
}
}
flowが外部要因で終了するときなどに後始末したい処理を記述する。
flowの強制終了
kill
kill flow_id;
int i = 0;
int iThd;
flow {
for(i = 0; i < 10; i++)
{
print i;
delay 1;
}
final print "final";
}
iThd = $last_thread_id;
wait(i == 5);
kill iThd;
遅延処理(時間指定)
delay
delay exp;
遅延処理を時間(整数型)で指定する。
flow {
print 1;
delay 1;
print 3;
}
flow {
print 2;
delay 1;
print 4;
}
delay (1+1);
print 5;
遅延時間0を指定すると遅延なしに次の文が実行される。
遅延処理(条件指定)
wait
wait condition;
遅延処理を条件が成立するまで行う。
int i;
flow {
wait(i == 5);
print i;
wait(i == 8);
print i;
}
for(i = 0; i < 10; i++)
delay 1;
条件が偽ならば時間1遅延処理を行う
while(!condition) delay 1; // と等価
イベント処理(一度のみ)
once (event_no) statement;
実行後event_noが発行されたら1度だけ処理を行います。
イベント処理(複数回)
always (event_no) statement;
実行後event_noが発行される度に処理を行います。
イベント発行処理
event event_no
event_noを発行します。
最終更新:2009年10月26日 01:28