2015年7月11日土曜日

開発環境

Schemeの処理系(解釈系、評価器、レジスタ計算機を翻訳した命令列中心のより、もう少しC言語の特性を使った書き方をしたもの(label, gotoではなく、関数を呼び出すとか))を少しずつ書き進めてめていくことに。

Land of Schemeで外部プログラム、コマンド、スクリプト等を実行するために必要になった、system 手続きを実装。(C言語の system 関数の機能と似たような機能、仕様には無いぽかった(?)。C言語の standard library の system 関数をそのまま利用。いずれ必要になったら(入力文字列を受け付けたりして、 system 関数だとセキュリティ上好ましくない場合等)、その時に、exec 関数等も追加実装。)

参考書籍等

kscheme

コード(BBEdit, Emacs)

system.c

#include "system.h"
#include <stdlib.h>
#include "list_operations.h"

data_s prim_system(data_s in) {
  data_s out;    
  int n = system(car(in).data.str);
  if (n) {
    out = data_s_new(Z, "-1");
  } else {
    out = data_s_new(Z, "0");
  }
  return out;
}

入出力結果(Terminal(kscm), REPL(Read, Eval, Print, Loop))

$ kscheme 
kscm> (system "echo Hello world!")
Hello world!
0
kscm> $

0 コメント:

コメントを投稿