* 川合のプログラミング言語自作のためのテキスト第三版#4 -(by [[K]], 2021.01.27) ** (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と同じなので省略 -(工事中) ** 次回に続く -次回: ''a21_txt01_5'' *こめんと欄 #comment