(画像処理番外編)基本構造編

●名前付け規則

 大文字小文字を区別します。
 トークンは、先頭がA〜Z、a〜z、全角文字のいずれかで始まり、先頭文字に加えて数字を混ぜて記述します。
 アポストロフィ(')、アンダーバー(_)の取り扱いは現状未定です。
 特にアンダーバーは、レンダリング表記時の書体指定や、単位名(メートル、秒などの記号)として使う場合があるため、アンダーバーを混在させた名称の使用は推奨しません。
 日本語(JIS第一水準、JIS第二水準漢字)は使用できます。

変数の例
a
c55
長さ


【非互換】
 現状、当言語はASCIIコードを用いて記述します。
 Fortressは本来UNICODEで記述します。


2008/03/20
●記号

 仕様上、演算子の定義が可能のため、連続する記号は一つの記号とみなします。

x := a--b

この場合、
x := a-( -b)

とは解釈されず、--という演算子となります。もし、--演算子が定義されていない場合はエラーとなります。

 括弧については、開き括弧"("に始まる一連の記号と、一連の記号の締めくくりに閉じ括弧")"がペアになって解釈されます。

x := a(##b##)

この場合、(##演算子と##)演算子がペアとなって一つの二項演算子を形成します。もし、(##〜##)演算子が存在しない場合はエラーとなります。

よくある落とし穴に次の書き方があります。
x := a+(-b)

 この場合、括弧とマイナス記号が連結した"(-"演算子と、それとペアとなる"-)"演算子を探そうとします。(-演算子に対する-)演算子がないため、エラーとなります。
 この場合、
x := a-( -b)
 と、間隔を開けなければなりません。


2008/03/20
●定数

・数値定数
 数字または1つの小数点を含みます。
100 …整数型(ZZ32)定数
3.14 …実数型(RR64)定数
6.67259 10^(-11) …実数型(RR64)定数の指数表記(Fortress型互換)【現在未対応】
6.67259×10^(-11) …実数型(RR64)定数の指数表記【現在未対応】

 ※現在、マイナス表記は存在せず、単項演算子の-によって(演算によって)正負の反転を行っています。
 ※現在、実数値に対する指数表記はサポートされていません。

・文字列定数
 文字列はダブルコーテーションで囲みます。

    str = "Hello, world"

 ダブルコーテーションの全角表記も可能です。(ただし「“」、「”」、半角の「"」の区別はありません。全角の「“」で始まって半角の「"」で閉じても問題ありません。)

    str = “Hello, world”


また、\記号によるエスケープシーケンス表記があり、C言語とほぼ同じです。
\b …バックスペース
\t …タブ
\n …改行
\f …フォームフィード【未対応】
\r …復帰
\" …ダブルコーテーション
\” …ダブルコーテーション
\“ …ダブルコーテーション
\\ …\記号(ASCIIではバックスラッシュ)

    foldername = "H:\\DCIM\\100NCD70"

エスケープコード表記した場合のダブルコーテーションは異なる文字となります。

※エスケープシーケンス表記はVer.0.12以降でのサポートとなります。


2008/03/20
●演算子と式

+ … 加算
- … 減算
/ … 除算
乗算については、演算子は必要ありません。
* … 乗算(独自拡張)
^ … べき乗【現在未対応】

< … 比較(より大きい)
≦ … 比較(以上)
> … 比較(より小さい)
≧ … 比較(以下)
= … 比較(等しい)【現在未検証】
== … 比較(等しい)(独自拡張)
=/= … 比較(等しくない)
≠ … 比較(等しくない)

現在、比較演算子での連続比較には対応していません。(if a≦ b ≦ c then〜 という書き方をしても、aとbの比較結果のみしか判定しません。)


【非互換】
 演算子には優先順位を与えてあります。ホワイトスペースを置くか置かないかで優先順位が変わる事はありません。


2008/03/21
●コメント

コメントは、「(*」から「*)」までです。

(* これはコメントです。 *)
(* 複数の行に
 渡って書くことが
できます。 *)

 演算子の定義が可能なため、原則として「(*」の後ろには空白が、「*)」の前にも空白が必要です。
(**** これは、コメントになりません。 ****)

この場合、「(****」演算子と、それと対をなす「****)」演算子があり、引数として「これは、コメントになりません。」という名前の変数があると解釈されます。その演算子および変数が定義されていない場合は、エラーとなります。


2008/03/09
●component コンポーネント名
:
end


1つのコンポーネントの名前とその範囲を指定します。
コンポーネント名は任意に指定できます。
現在、特に深い意味はありません。
component bitmaptest
    export Executable
    run():()=do
        (* 640×480のビットマップを作成 *)
        bmp1:bitmap=bitmap(640,480)

        f:form=forms("main")

        (* 読み取った画像を表示 *)
        f.controls("pictureBox1").showImage(bmp1)

    end
end



2008/02/27
●export API名

API名を指定します。
現在、API名としてExecutableのみ指定可能で、特に意味を持っていません。
component bitmaptest
    export Executable
    run():()=do
        (* 640×480のビットマップを作成 *)
        bmp1:bitmap=bitmap(640,480)

        f:form=forms("main")

        (* 読み取った画像を表示 *)
        f.controls("pictureBox1").showImage(bmp1)

    end
end



2008/02/27
●データ型

データ型には次の種類が現在実装されています。
【Fortress互換型】
ZZ32 … 32ビット整数(long型)
RR64 … 64ビット浮動小数(同double型)
String … 文字列型
Boolean … 論理型



【独自拡張の型】
integer … 32ビット整数(int型)
double … RR64型に同じ
string … String型に同じ
bitmap … 24ビットカラービットマップ
color … 24ビットカラー型
form … フォーム(画面表示するウィンドウ)型
control … コントロール(フォーム上のテキストボックスなどのコントロール)型



2008/03/08
●変数の宣言

変数の宣言は、変数名の後ろに型を指定します。
    a:ZZ32

ZZ32(32ビット整数)型の変数a

イコールに続いて値を指定できます。
    a:ZZ32=3

ZZ32(32ビット整数)型の変数aに値3を設定します。
※イコールにより初期化された変数は、以後変更できなくなります。(Ver.0.12以降) 値の変更があり得る場合は、変数を宣言後に、別途 := で代入を行います。
    a:ZZ32
    a:=3


・型推定(Ver.0.12以降)
    a=3

未定義の語があり、初期化指定を伴う場合、変数が宣言されます。宣言される変数の型は、初期化される値の型に等しくなります。


2008/03/21
●配列

【現在、実装されていません。】


2008/03/08
●関数の宣言

関数の宣言は、一般に
関数名(引数1:引数1の型,引数2:引数2の型…):戻り値の型=式

または
関数名(引数1:引数1の型,引数2:引数2の型…):戻り値の型=do
    式1
    式2
    式3
     :
    式n
end
で、後者の場合、関数の値としては式nの結果が返されます。
戻り値を持たない関数の戻り値の型には()を指定します。


f():()=do
    print 1
end


【現在、引数を持つ関数、戻り値を持つ関数については実装されていません。また、ユーザー定義関数から別の関数を呼ぶ事についても、動作保証はありません。】


2008/03/09
●最初に実行される関数

最初に実行される関数は、runという名前の関数になります。
C言語で言う、main関数に相当します。

component test
  export Executable
  run():()=do
    a:ZZ32=10
    b:ZZ32=20
    print 4 a b
  end
end

実行結果
800



2008/03/09

[戻る]