川合のプログラミング言語自作のためのテキスト第三版#4
(9) TL-4
- みなさんは「REPL」という言葉を知っているでしょうか。これは「Read-Eval-Print Loop」の略で、インタプリタが起動して、プロンプトからコマンドを入力すると(Read)、直ちに評価・実行されて(Eval)、結果が表示される(Print)、というのがループになっていて、何度でもできる機能のことです。
- これができるようになると、自作言語は見違えるほど魅力的になります。
- ということで、TL-4ではそれをやってみようと思います。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef unsigned char *String; // こう書くと String は unsigned char * の代用になる.
int loadText(String path, String t, int siz) // TL-1のとは違います(改造).
{
FILE *fp;
unsigned char s[1000];
int i = 0;
if (path[0] == 0x22) { i = 1; } // ダブルフォールトがあればはずす.
for (; path[i] >= ' ' && path[i] != 0x22; i++) { // ファイル名の末尾についているゴミをとってあげる.
s[i] = path[i];
}
s[i] = 0;
fp = fopen(s, "rt"); // テキストモードでファイルを開く.
if (fp == 0) { // ファイルを開けなかった.
printf("fopen error : %s\n", path);
return 1;
}
i = fread(t, 1, siz - 1, fp);
fclose(fp);
t[i] = 0; // 終端マークを書いておく.
return 0;
}
int isAlphabet(unsigned char c) → TL-2と同じなので省略
int lexer(String s, String b, String t[]) → TL-2と同じなので省略
#define MAX_TC 255 // トークンコードの最大値.
String ts[MAX_TC + 1]; // トークンの内容(文字列)を記憶.
unsigned char tcBuf[10000];
int tcs = 0, tcb = 0;
int getTc(String s) → TL-2と同じなので省略
次回に続く
こめんと欄