Meshiが先週参加していたe-learning関係の学会の話を少し聞いた.
C言語インタプリタとかがあると喜ばれるらしいです.軽く探してましたが,良い感じの物はありませんでした.
適当なものならgdbで簡単に作れそうだったので,やってみました.
ただのgdbラッパですが,気持ちの良い動作をさせるのに手間取りました・・・
こんな感じに使えます.
[TOTORO /d/C++Projects/ic] > ./ic.sh
ic> printf("%02X\n", 'A')
41
$1 = 3
ic> puts("hogehoge")
hogehoge
$2 = 10
ic> 3+4
$3 = 7
ic> cos(3.14)
$4 = 639
ic> /f cos(3.14)
$5 = 8.95429719e-43
[TOTORO /d/C++Projects/ic]
浮動小数点だめじゃないか,,,
以下ソース(ライセンスはNYSL)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <signal.h>
void b(){}
int main()
{
setvbuf(stdout, 0, _IONBF, 0);
b();
return 0;
}
#!/usr/bin/perl
$|=1;
while(<>)
{
chomp;
if("" eq $_){ next }
elsif(substr("quit", 0, length($_)) eq $_)
{
print "quit";
exit 0;
}
else
{
print "p $_\n";
}
}
#!/usr/bin/perl
$|=1;
for($i=0;$i<4;$i++){<STDIN>}
while(!eof(STDIN))
{
$buf.=getc STDIN;
if(substr("(gdb)", 0, length($buf)) ne $buf)
{
print $buf;
$buf ="";
}
elsif($buf eq "(gdb)")
{
print "ic>";
$buf ="";
}
}
br b run
#!/usr/bin/sh perl in.pl | gdb -q -x x.txt a | perl out.pl
gcc -g -lm ic.c
のようにコンパイルして
./ic.sh
のように使います.a.outが嫌な場合は,コンパイルのオプションとic.shのaの部分を変えればOKです.
適当すぎですが笑わないでください.
パイプを使うとかっこよくみえるかもしれませんが,めんどくさいのでこのままです.
あると意外に便利な気がします.
昨日は18時過ぎに目が覚めて,26時過ぎに寝た.
今日は6時前に目が覚めた.