tl1c
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* TL-1のさらなるコンパクト化
-(by [[K]], 2019.06.09)
** (1)
-[[text0001]]で紹介したTL-1はC言語で標準関数しか使わない...
-これをより小さくすることなんてできないと当時は思っていた...
-まず結論から言うと、たったの''52行''になります。
-主な変更点としては、変数txtやpcなどを外部変数にするをや...
-次に定数の特別扱いをやめます。たとえば「2」という文字列...
-ただし、単に「2」を変数扱いするだけだとうまくいきません...
-このような仕様だと、2=3;とかいう意味不明な代入文がエラー...
#include <stdio.h>
#include <stdlib.h>
void loadText(int argc, const char **argv, unsigned char...
int main(int argc, const char **argv)
{
unsigned char txt[10000]; // ソースコード.
int i, pc, var[256]; // 変数.
loadText(argc, argv, txt, 10000);
for (i = 0; i < 10; i++)
var['0' + i] = i; // 定数を変数扱いにする代わり...
for (pc = 0; txt[pc] != 0; pc++) {
if (txt[pc] == '\n' || txt[pc] == ' ' || txt[pc] ...
continue;
if (txt[pc + 1] == '=') { // 2文字目が"=".
if (txt[pc + 3] == ';') { // 単純代入.
var[txt[pc]] = var[txt[pc + 2]];
} else if (txt[pc + 3] == '+' && txt[pc + 5]...
var[txt[pc]] = var[txt[pc + 2]] + var[tx...
} else if (txt[pc + 3] == '-' && txt[pc + 5]...
var[txt[pc]] = var[txt[pc + 2]] - var[tx...
} else
goto err;
} else if (txt[pc] == 'p' && txt[pc + 1] == 'r' ...
printf("%d\n", var[txt[pc + 6]]);
} else
goto err;
while (txt[pc] != ';')
pc++;
}
exit(0);
err:
printf("syntax error : %.10s\n", &txt[pc]);
exit(1);
}
* こめんと欄
#comment
終了行:
* TL-1のさらなるコンパクト化
-(by [[K]], 2019.06.09)
** (1)
-[[text0001]]で紹介したTL-1はC言語で標準関数しか使わない...
-これをより小さくすることなんてできないと当時は思っていた...
-まず結論から言うと、たったの''52行''になります。
-主な変更点としては、変数txtやpcなどを外部変数にするをや...
-次に定数の特別扱いをやめます。たとえば「2」という文字列...
-ただし、単に「2」を変数扱いするだけだとうまくいきません...
-このような仕様だと、2=3;とかいう意味不明な代入文がエラー...
#include <stdio.h>
#include <stdlib.h>
void loadText(int argc, const char **argv, unsigned char...
int main(int argc, const char **argv)
{
unsigned char txt[10000]; // ソースコード.
int i, pc, var[256]; // 変数.
loadText(argc, argv, txt, 10000);
for (i = 0; i < 10; i++)
var['0' + i] = i; // 定数を変数扱いにする代わり...
for (pc = 0; txt[pc] != 0; pc++) {
if (txt[pc] == '\n' || txt[pc] == ' ' || txt[pc] ...
continue;
if (txt[pc + 1] == '=') { // 2文字目が"=".
if (txt[pc + 3] == ';') { // 単純代入.
var[txt[pc]] = var[txt[pc + 2]];
} else if (txt[pc + 3] == '+' && txt[pc + 5]...
var[txt[pc]] = var[txt[pc + 2]] + var[tx...
} else if (txt[pc + 3] == '-' && txt[pc + 5]...
var[txt[pc]] = var[txt[pc + 2]] - var[tx...
} else
goto err;
} else if (txt[pc] == 'p' && txt[pc + 1] == 'r' ...
printf("%d\n", var[txt[pc + 6]]);
} else
goto err;
while (txt[pc] != ';')
pc++;
}
exit(0);
err:
printf("syntax error : %.10s\n", &txt[pc]);
exit(1);
}
* こめんと欄
#comment
ページ名: