私はC#でCocoRサンプルTasteを使用しています。
次のような操作が与えられたときに文字列を書くためにコードを拡張しようとしています
HelloWorldを書く
文字列を保存および書き込む方法を特定しました。私が抱えている問題に関連するコードを出している:
拡張されたTaste.ATG
| "write"
{ Expr<out type> (. if (type != integer) SemErr("integer type expected");
gen.Emit(Op.WRITE); .)
| '"'
ident (. name = Convert.ToString(t.val);
gen.Emit(Op.READS);
gen.Emit(Op.WRITES).)
'"'
}';'
CodeGen.csの拡張操作:Filestreamはこのように使用されます
public void Interpret (string data) {
int val;
try {
FileStream s = new FileStream(data, FileMode.Open);
Console.WriteLine();
pc = progStart; stack[0] = 0; top = 1; bp = 0;
ファイルストリームを使用するケーススイッチを追加しました
case Op.READ: val = ReadInt(s); Push(val); break;
case Op.READS: stackString[index] = ReadString(s) ; Push(index); index++; break;
case Op.WRITE: Console.WriteLine(Pop()); break;
case Op.WRITES: Console.WriteLine(stackString[Pop()]); break;
問題は、文字列を読み取る方法がインターネット上のどこにも見つからないことです。明らかにReadString(s)
、同じようにReadInt(s)
は機能しません。ファイルストリームから文字列を読み取る操作を見つけるための助けを得ることができるかどうか疑問に思いました。
私はこれまでファイルストリームの管理を行ったことがありません。