シングルヘッダーのTcl処理系。
- API・ドキュメントは
miclo.h
の中に記述してある。 - Sdsを参考にしたファットポインタ文字列を内部で使っている。
Tclとの違い
- 真偽値は空文字列
""
が偽、それ以外が真。 - ifコマンドやwhileコマンドのtest句はexprではない。
- ifコマンドのtest句は再評価されない。
if {foo} {...}
だと文字列foo
なので必ず真になる。コマンドの実行結果がほしければif [foo] {...}
と書くこと。 - 空白後の
#
からコメントとして全て読み飛ばされる。#
から始まる文字列を引数として渡したいときは、{#foo}
や"#foo"
と記述する。
ファイル
miclo.h
本体。使い方はコメントを参照。mclsh.c
REPLのサンプル。test.c
miclo.hのテスト。
サンプル
REPL
#define MCL_IMPL
#define MCL_REPL
#include "miclo.h"
int main(int argc, char* argv[]) {
(void)argc, (void)argv;
MclInterp* mcl = Mcl_NewInterp(NULL);
MCL_Assert(mcl != NULL);
Mcl_RunRepl(mcl);
Mcl_FreeInterp(mcl);
return 0;
}
コマンドリスト
proc name {args} {body}
if test1 {body1} ?elif {test2} {body2} ...? ?else {bodyN}?
while {test} {body}
break
continue
for {init} {test} {next} {body}
foreach varName xs {body}
set var ?val?
subst string
return ?string?
global var ?var ...?
eval string
uplevel ?level? string
upvar ?level? otherVar myVar ?otherVar myVar ...?
catch script ?var?
switch ?options? string {pattern body ?pattern body ...?}
- or
switch ?options? string pattern body
- or
error message
load filepath
- ファイルをevalする。tclの
source
- ファイルをevalする。tclの
- list
list new ?args ...?
list get xs index
list append xs x
list set var index ?index ...? val
list range xs start end
- args
- 可変長引数を扱う。
procs
の引数リストで...
を最後に定義すると使える。 args next
args empty?
- 可変長引数を扱う。
! string
notrename old new
- string
- UTF8対応
string match pattern string
string length string
string range string start end
string compare s1 s2
- info
info procs ?pattern?
info returnCode name
- 四則演算
+ - * / %
- 数値比較
== != > >= < <=
- 文字列比較
eq ne
expr arg ?arg ...?
- 変数はsubstされない
+ - * /
とカッコに対応
puts ?channelId? string
gets channelId varName
open path ?access?
close channelId
flush channelId
exit ?code?
- clock
clock seconds
clock format clockValue fmt
- 対応しているフォーマット指定子は
%Y %y %m %d %H %M %S
clock scan string fmt
- 対応しているフォーマット指定子は
%Y %m %d %H %M %S
- rand
- MCL_NO_CLOCKならインタプリタのアドレスが、そうでなければunix時間が初期シード
rand n
0以上n未満のランダムな整数を返すrand seed n
シード値をnにセット