home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1997 March
/
VPR9703A.ISO
/
VPR_DATA
/
DOGA
/
SOURCES
/
POLYEDIT.LZH
/
ML.DOC
< prev
next >
Wrap
Text File
|
1996-06-21
|
21KB
|
520 lines
****************************************************************************
*
* マクロ言語
*
* Copyright T.Kobayashi 1995.7.1
*
****************************************************************************
1.はじめに
'ml'はインタープリンタ形式で実行するマクロ言語である。モデラ( model.exe,
model.x )のユーザインターフェースの記述に用いられている。
2.予約語と定数
予約語は以下の通り。
if, else, while, do, for, break, continue, return, var,
function, private, const
定義済み定数(システム定数)は以下の通り。
TRUE 真
FALSE 偽
ON ON
OFF OFF
NOASSIGN 値が代入されていない変数
BOOLEAN 論理型
INT 整数型
REAL 実数型
ARRAY 配列型
FUNC 関数への参照型
TYPE 「型を示す」型
OBJECT オブジェクト型
3.文法定義
文法の定義に用いる記号を示す。
::= 左辺は右辺で定義される
( ... )+ カッコ内の1回以上の繰り返し
( ... )* カッコ内の0回以上の繰り返し
[ ... ] カッコ内は省略可能
" ... " クオートで囲まれた文字列そのもの
< ... > 文法上の概念
| 左右のいずれか
以下に言語の文法定義を示す。
<プログラム> ::= ( <文> )*
<文> ::= <宣言> | <実行文> | <複文>
<複文> ::= "{" <文>* "}"
<宣言> ::= <変数宣言> | <関数宣言>
<変数宣言> ::= var [ <変数修飾子> ] <変数定義> ( , <変数定義> )* ;
<変数修飾子> ::= ( private | const )+
<変数定義> ::= <変数> [ = <式> ]
<関数宣言> ::= function <識別子> "(" [ <変数列> ] ")" <文>
<変数列> ::= <変数> ( , <変数> )*
<変数> ::= <識別子> ( "[" <式> "]" )*
<実行文> ::= <if文> | <while文> | <do文> | <for文>
<break文> | <continue文> | <return文> |
<代入文> | <インクリメント文> | <手続き文>
<if文> ::= if "(" <式> ")" <文> [ else <文> ]
<while文> ::= while "(" <式> ")" <文>
<do文> ::= do <文> while "(" <式> ")" ;
<for文> ::= for "(" <文> <式> ; <文> ")" <文>
<break文> ::= break ;
<continue文> ::= continue ;
<return文> ::= return [ <式> ] ;
<代入文> ::= <変数> 代入演算子> <式> ;
<代入演算子> ::= = | += | ー= | *= | /= | &= | "|="
<インクリメント文> ::= <変数> <インクリメント演算子> ;
<インクリメント演算子> ::= ++ | --
<手続き文> ::= <識別子> "(" [ <引数列> ] ")" ;
<引数列> ::= <式> ( , <式> )*
<式> ::= <論理積式> ( <論理和演算子> <論理積式> )*
<論理積式> ::= <比較式> ( <論理積演算子> <比較式> )*
<比較式> ::= <単純式> ( <比較演算子> <単純式> )*
<単純式> ::= <積和式> ( <シフト演算子> <積和式> )*
<積和式> ::= <項> ( <加法演算子> <項> )*
<項> ::= <因子> ( <乗法演算子> <因子> )*
<因子> ::= <単純因子> ( <参照演算子> <単純因子> )*
<単純因子> ::= [ <単項演算子> ]
( <変数> | <定数> | <関数> | "(" <式> ")" ) |
"{" <式> (, <式> )* "}"
<関数> ::= <識別子> "(" [ <引数列> ] ")"
<定数> ::= <数値定数> | <文字列定数> | <システム定数>
<論理和演算子> ::= "|" | ^
<論理積演算子> ::= &
<比較演算子> ::= == | != | < | > | <= | >=
<シフト演算子> ::= "<<" | ">>"
<加法演算子> ::= + | -
<乗法演算子> ::= * | / | %
<参照演算子> ::= . | "->"
(注意)
<識別子>はアルファベットまたは数字または'_'の文字を組み合わせた文字列
(ただし、最初の文字は数字以外)である。
<数値定数>は0~9と'.'を組み合わせた文字列またはシングルクオートで囲ま
れた文字(その文字のアスキーコードを示す)。
<文字列定数>はダブルクオート'"'で囲まれた文字列である。
<システム定数>は前節で定義した。
<手続き文>と<関数>で参照されている<識別子>は<関数宣言>で宣言した<識別
子>でなければならない。
<単純因子>と<代入文>、<インクリメント>文で参照されている<識別子>は<変
数定義>で宣言した<識別子>でなければならない。
4.意味定義
プログラム
<プログラム>は複数の<文>から構成される。<プログラム>を複数のファイルに分
割しても良いが、分割は<文>単位でされなければならない。
実行はファイルの先頭からなされる。分割した場合は別途ファイルの実行順を指
定する手段が用意される(はずである)。
文
<文>はフリーフォーマットである。改行はスペース文字と同様の意味しか持たな
い。Cと同様に{}で囲まれた1個以上の文は1個の文と同じものとみなされる(複
文)。
宣言文
<宣言文>は実行されない。
関数宣言
<関数宣言>中の文も宣言時には実行されない。他の<文>から参照された時に実行
される。宣言は参照の前になされなければならない。<関数宣言>中で<関数宣言>
することはできない。従って、手続きと関数は常に大域である。
変数宣言
トップレベルで宣言された<変数>は大域変数となる。<関数宣言>の中で宣言され
た<変数>はローカル変数となる。<変数宣言>は必ずしも<関数宣言>の先頭でする
必要はないが、使用する前には宣言しなければならない。同様に大域変数もファ
イルの先頭で宣言する必要はないが、使用する前に宣言しなければならない。
ローカル変数名は関数中で(複文中ではない)ユニークな名前であり、大域変数
名とは重なってもよい。
宣言時にその値を代入することも可能である。
変数修飾子privateを付加するとそのモジュールのみで参照可能な変数になる。
変数修飾子constを付加すると定数となる(宣言時以外で代入不可能)。
変数と型
変数には型はない。数値には型がある。従って数値はその値と型を持ち、変数は
型と値の両方を保持する。型は以下の通り。
BOOLEAN 論理型
INT 整数型
REAL 実数型
ARRAY 配列型
FUNC 関数への参照型
TYPE 「型を示す」型
OBJECT オブジェクト型
組み込み関数typeofで数値からその型を得ることができる。
BOOLEANは論理演算と一致、不一致比較( ==, != )のみ演算可能。INTは参照演算
を除くすべての演算が可能。REALは論理演算、シフト演算、参照演算以外のすべ
ての演算が可能。ARRAY, FUNC, TYPEは一致、不一致比較のみ演算可能。
一度も代入されてない変数を参照してはならない。
OBJECTは拡張型であり、拡張された型をクラスと呼ぶ。
クラスは応用システムごとに定義される(行列型、ベクトル型、複素型等)。文
字列クラスはデフォルトで定義されている。クラスごとに演算子の動作を定義で
き、関数もオーバロードできる。
配列変数
配列変数はCと同様に[]を用いる。多次元配列も使用可能。
変数に型はないので配列変数の各メンバに別々の型の数値を代入してもよい。
1次元の配列変数を識別子だけで参照するとARRAY型とみなされる。同様に2次元の
配列変数を識別子だけまたは1次元配列として参照してもARRAYとみなされる。
制御文
if, while, fo, for, break, continue, returnの動作はCと同様である。
5.組み込み関数
function print( ... )
----------------------------------------------------------------------------
引数を表示する。引数は任意の型が許される。拡張クラスの場合もtostring関数が
定義されていれば表示可能である。
戻り値なし。
----------------------------------------------------------------------------
function fprint( fname, ... )
----------------------------------------------------------------------------
引数をファイル fname に追加書き込みする。引数は任意の型が許される。拡張クラ
スの場合もtostring関数が定義されていれば表示可能である。
戻り値なし。
----------------------------------------------------------------------------
function tostring( arg, cols )
----------------------------------------------------------------------------
引数を文字列に変換する。
colsは文字数だが省略可能。
戻り値は文字列クラス。
----------------------------------------------------------------------------
function call( func, ... )
----------------------------------------------------------------------------
関数を呼び出す。
funcはFUNC型でなければならない。2番目以降の引数にfuncへの引数を設定する。
[例] a = call( tostring, "123" ); aに123が代入される。
----------------------------------------------------------------------------
function typeof( arg )
----------------------------------------------------------------------------
argの型を返す。argはすべての型で有効。
戻り値はTYPE型。
----------------------------------------------------------------------------
function sizeof( ary )
----------------------------------------------------------------------------
配列のサイズを返す。aryは配列型。
戻り値はINT型。
----------------------------------------------------------------------------
function sqrt( arg )
function sin( arg )
function cos( arg )
function tan( arg )
function asin( arg )
function acos( arg )
function atan( arg )
function atan2( arg1, arg2 )
function tan( arg )
function log( arg )
function exp( arg )
----------------------------------------------------------------------------
数値関数、引数はREAL型で戻り値もREAL型
----------------------------------------------------------------------------
function abs( arg )
----------------------------------------------------------------------------
引数argの絶対値を求める。argはINTまたはREAL型。
戻り値はargと同じ型。
----------------------------------------------------------------------------
function ObjectCount()
----------------------------------------------------------------------------
現在確保されているオブジェクト数を返す。
デバッグ用
----------------------------------------------------------------------------
function StackPtr()
----------------------------------------------------------------------------
現在のスタックポインタを返す。
デバッグ用
----------------------------------------------------------------------------
6.文字列クラス
演算子 +
----------------------------------------------------------------------------
引数の文字列を連結する。
----------------------------------------------------------------------------
演算子 <, >, <=, >=, ==, !=
----------------------------------------------------------------------------
文字列を比較する。
----------------------------------------------------------------------------
演算子 !
----------------------------------------------------------------------------
文字列の長さを得る。
式の値はINTである。
----------------------------------------------------------------------------
function strtoasc( str )
----------------------------------------------------------------------------
文字列の最初の文字のアスキーコードを得る。
戻り値はINT型
----------------------------------------------------------------------------
function asctostr( code )
----------------------------------------------------------------------------
アスキーコードから1文字の文字列を生成する。
戻り値は文字列クラス
----------------------------------------------------------------------------
function substr( str, n )
----------------------------------------------------------------------------
部分文字列を得る。
nはINT型で正数の時はstrの最初のn文字を返す。負数の時は最後のn文字を返す。
----------------------------------------------------------------------------
function search( str, key )
----------------------------------------------------------------------------
文字列str中の部分文字列keyを検索する。
戻り値はINT型でkeyの位置を返す。
見つからなかった時は-1を返す。
----------------------------------------------------------------------------
function atoi( str )
function atof( str )
----------------------------------------------------------------------------
文字列をそれぞれINT型とREAL型に変換する。
----------------------------------------------------------------------------
function sprintf( fmt, [arg, ...] )
----------------------------------------------------------------------------
fmt に基づいて整形した結果の文字列を返す。使えるフォーマットは、
%s,%d,%x,%c,%f,%e 。詳しくは C 言語の本を見よ。
----------------------------------------------------------------------------
function getenv( str )
----------------------------------------------------------------------------
文字列strで指定した環境変数を得る。
環境変数が設定されていない場合は""を返す。
----------------------------------------------------------------------------
function access( path, mode )
----------------------------------------------------------------------------
ファイルがアクセス可能かどうかを調べる。
アクセス可能ならTUREを、そうでなければFALSEを返す。
modeはINTでCのaccessのパラメータと同じ意味。
----------------------------------------------------------------------------
function fullpath( path )
----------------------------------------------------------------------------
ファイル名をフルパスに変換する。
----------------------------------------------------------------------------
function toupper( str )
----------------------------------------------------------------------------
文字列中の文字をすべて大文字に変換する
----------------------------------------------------------------------------
function tolower( str )
----------------------------------------------------------------------------
文字列中の文字をすべて小文字に変換する
----------------------------------------------------------------------------
function delete( fname )
----------------------------------------------------------------------------
ファイルを削除する。
----------------------------------------------------------------------------
function dir( [path] )
----------------------------------------------------------------------------
path無指定時、カレントディレクトリを返す。
path指定時、カレントディレクトリを path に変更する。あ、カレントドライブが変
わらんから使えんなぁ。
----------------------------------------------------------------------------
7.行列クラス
行列クラスはライブラリ matrix.dl と matclass.dl をリンクすると使用できる。
定数
----------------------------------------------------------------------------
UNIT_MATRIX 単位行列
AXISX X軸(axis, rot関数で使用)
AXISY Y軸(axis, rot関数で使用)
AXISZ Z軸(axis, rot関数で使用)
----------------------------------------------------------------------------
演算子 +
----------------------------------------------------------------------------
行列の和を求める。
----------------------------------------------------------------------------
演算子 *
----------------------------------------------------------------------------
行列の積を求める。
----------------------------------------------------------------------------
演算子 /
----------------------------------------------------------------------------
被除数と除数の逆行列との積を求める。
----------------------------------------------------------------------------
function Matrix( a11, a12, a13,
a21, a22, a23,
a31, a32, a33,
a41, a42, a43 )
function Matrix( v1, v2, v3, v4 )
function Matrix( v1, v2, v3 )
----------------------------------------------------------------------------
行列クラスを生成する。
----------------------------------------------------------------------------
function vec( mat, xx, xy, xz, zx, zy, zz )
function vec( mat, vx, vz )
----------------------------------------------------------------------------
ベクトル指定で行列を生成する。
(xx, xy, xz ),vxはX軸が移るベクトル、( zx, zy, zz ),vzはZ軸が移るベクトル。
----------------------------------------------------------------------------
function axis( mat, a1, a2 )
----------------------------------------------------------------------------
軸変換の行列を生成する。
a1, a2はAXISX, AXISY, AXISZのいずれかで、指定した2軸が入れ替わる。
----------------------------------------------------------------------------
function move( mat, x, y, z )
function move( mat, vec )
----------------------------------------------------------------------------
平行移動の行列を生成する。
x, y, z はINTまたはREALで平行移動成分を示す。
vec はベクトルで平行移動成分を示す。
----------------------------------------------------------------------------
function rot( mat, type, deg )
----------------------------------------------------------------------------
回転の行列を生成する。
typeはAXISX, AXISY, AXISZのいずれか。
degはINTまたはREALで回転角でdegreeで指定する。
----------------------------------------------------------------------------
function scale( mat, x, y, z )
function scale( mat, vec )
----------------------------------------------------------------------------
拡大縮小の行列を生成する。
x, y, z はINTまたはREALで拡大率軸ごとにを指定する。
vec はベクトルで拡大率を軸ごとにを指定する。
----------------------------------------------------------------------------
function getvector( mat, n )
function getvector( mat, ary )
----------------------------------------------------------------------------
行列のn番目(0~3)要素ベクトルを返す。
あるいは、要素数4の配列にベクトルを設定する。
----------------------------------------------------------------------------
8.ベクトルクラス
行列クラスはライブラリ matrix.dl と matclass.dl をリンクすると使用できる。
演算子 +
----------------------------------------------------------------------------
ベクトルの和を求める。
----------------------------------------------------------------------------
演算子 -
----------------------------------------------------------------------------
ベクトルの各成分ごとの差を求める。
----------------------------------------------------------------------------
演算子 *
----------------------------------------------------------------------------
ベクトル積を求める。
----------------------------------------------------------------------------
演算子 .
----------------------------------------------------------------------------
スカラー積を求める。
式の値はREAL型になる。
----------------------------------------------------------------------------
function vector( x, y, z )
function vector( ary )
----------------------------------------------------------------------------
ベクトルを生成する。
x, y, z はINTまたはREALで各成分
ary[0]~ary[2] はINTまたはREALで各成分
----------------------------------------------------------------------------
function unit( vec )
----------------------------------------------------------------------------
ベクトルを正規化する。
----------------------------------------------------------------------------
function abs( vec )
----------------------------------------------------------------------------
ベクトルの大きさを得る。
戻り値はREAL型
----------------------------------------------------------------------------
function vx( vec )
----------------------------------------------------------------------------
ベクトルのX成分を得る
戻り値はREAL型
----------------------------------------------------------------------------
function vy( vec )
----------------------------------------------------------------------------
ベクトルのY成分を得る
戻り値はREAL型
----------------------------------------------------------------------------
function vz( vec )
----------------------------------------------------------------------------
ベクトルのZ成分を得る
戻り値はREAL型
---------------------------------------------------------------------------
function element( vec, ary )
---------------------------------------------------------------------------
ベクトルの各成分を得る。
aryにサイズが3以上の配列変数を設定し、(x, y, z)が格納される。
---------------------------------------------------------------------------
7. ファイルクラス
function fileopen( filename [, type])
---------------------------------------------------------------------------
ファイルをオープンする。type 無指定、もしくは type = "r" の時は読み込み、
"w" の時は書き込み、"a" の時は追加。戻り値はファイルクラス。
失敗したときは FALSE (Boolenan 型)を返す。
---------------------------------------------------------------------------
function fileputs( file, arg1 [, arg2 ...] )
---------------------------------------------------------------------------
file に文字列を出力する。
通常は TRUE 、エラー時には FALSE を返す。
---------------------------------------------------------------------------
function filegets( file )
---------------------------------------------------------------------------
file から 1 行入力する。戻り値は文字列クラス。
---------------------------------------------------------------------------
function fileputc( file, code )
---------------------------------------------------------------------------
file に文字コード code の文字を出力する。
通常は TRUE 、エラー時には FALSE を返す。
---------------------------------------------------------------------------
function filegetc( )
---------------------------------------------------------------------------
file から1文字読み取り、その文字コードを返す。
---------------------------------------------------------------------------
function fileclose( file )
---------------------------------------------------------------------------
file の読み書きを終了する。
通常は TRUE 、エラー時には FALSE を返す。
---------------------------------------------------------------------------