先日わっからーんと嘆いていたIO関連を\read以外とりあえず実装しました。
\immediateとか、どうしようかねーとか言っていましたが、ひとまずLamuriyanでの実装は
1.処理系のimmediateIOフラグをオンにする
2.\writeまたは\readが実行されたときにimmediateIOがオンである場合
\write:書き込んだ後バッファを即座にフラッシュする
\read :トークン分割をする前にファイルを全て読み込む
という処理をすることにしました。意味があるのかどうかすっごく謎だけど。特に\readは全く意味が分からない。意味が間違ってるぜ!という場合は是非あるべき実装について教えてください(-_-)
\writeに関しては全部実装したけど、\readが実装されていないのはちょっと面倒くさいことに気がついたからです。
というのもですね、「\read \in to \value」とすると、トークン分割された結果が\valueに格納されるのです。実装するには「\def\value{読み込んだ内容}」っていう文字列を入力に挿入すれば良いかな〜と思ってて、それで大概うまくいくんですけど、微妙にTeXと挙動が違うんですよ。TeXの場合、読み込んだ内容の{}の対応がきちんとしてないと、ファイルの内容がおかしいよって言うエラーが出るんですけど、Lamuriyan処理系の実装ではそれが出来ないんです。Lamuriyan処理系では、今読み込んだ文字がどのファイルから来ている物なのかっていう区別をしていない処理系なんです。なので、「\def\value{読み込んだ内容}」を処理していく上で}が足りなくても、その次以降の文字列を}の整合性がとれるまで処理しちゃうんですよね。
なので、どこでエラーになってるのかわからねーって事になっちゃうんです。
まぁ、別に正しいときに正しく動けば良いじゃんって諦めればそれでいいんですけど、すこし粘ってみようかなと思っています。