川合のプログラミング言語自作のためのテキスト第三版#6
(13) TL-6
- TL-5は多少速くなったものの、C言語と比べれば圧倒的に負けたままで、ちょっとくやしくなってきました。
- ということで本気を出してどこまで速くなるか挑戦しました。まあJITコンパイラに作り替えれば劇的に速くなるのはわかっているのですが、それはCPUに依存するようになるので後回しにして、ここではJITコンパイラやインラインアセンブラを使わない範囲での最速を目指してみたいと思います。
#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-4と同じなので省略
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-4と同じなので省略
int phrCmp_tc[100 * 20];
unsigned char phrCmp_buf[100 * 100];
int phrCmp(int pid, String phr, int tc[], int pc) → TL-5と同じなので省略
int pc, pc1, var[MAX_TC + 1], tc[1000]; // 変数(var)とトークンコード(tc).
String t[1000]; // トークン(t).
(準備中)
int main(int argc, const char **argv) → TL-4と同じなので省略
(13) TL-6の簡単な説明
次回に続く
こめんと欄