• 締切済み

任意の関数を読み込む

プログラムに関して全くの初心者なんですが・・・  よくプログラムで計算をするときに、あらかじめコードに式を書いて、実行画面でパラメータを代入して計算をするって方法がありますよね~本である程度勉強してそれは出来るのですが、実行画面で、任意の関数を書いて、それを読み込んでくれるプログラムを作るっていうのは難しいのでしょうか?昔、字句解析ってやつを見た事があるのですが、ちんぷんかんぷんでした・・・ 何か簡単な方法、もしくは、よいHPがあればおしえていただけませんか?ちなみにC++Builderをつかっています。 宜しくお願いします。

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>C自体、その分野に関して、Perl やruby よりも劣っているということなのでしょうか? そうだとは思いません。 それは、コンパイラとインタプリタにおける特質というものだと思います。 コンパイラは、コンパイル時に、全ての命令を解釈して、実行時には実行するだけということにして、実行時の効率を上げています。 インタプリタは、対話的に実行できるために、入力時に解釈・実行をします。このように元々解釈しながら実行するという特長があるために、関数定義などを入力即実行ということができるわけです。 コンパイラ系においては、そのような解釈して実行というようなルーチンを組み込むことは、実行時のスピードなどを落とすことになったり、プログラムが(解釈部を実行時に含むことで)肥大化するということ(コンパイラとしての良さが失われる)からそのようなルーチンを組み込んでいないのだと思います。

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.3

エクセルは適当な式を入れると 計算してくれます。  これと同じにするには、 構文解析と字句解析ルーチン が必要です。  構文解析ルーチン の話は、コンパイラコンパイラ、 (コンパイラを作る話) で、調べてください。 文法はいろいろですが、 私は、LL1文法を使います。  これ以上書くと 規定違反になるので、 上の言葉を手がかりに検索してください。

yanees
質問者

お礼

ありがとうございます。やはり字句解析を勉強する必要があるのですね・・・ ご指摘されたことを参考にがんばってみます(^^)

回答No.2

言われているものとは違うかもしれませんけどとりあえず・・・ 内容は登録した関数(引数は同じものに限る)を選択して実行できるプログラムです。 かなり単純に作っていますが参考になればと思います。 しかしこれを使うと見たかんじがややこしいのですすめません #include<stdio.h> int Sousa1(int a); int Sousa2(int a); int Sousa3(int a); int main(void){ int erabu; int (*Sousa[3])(int atai);  /* int 返却値 Sousa 関数名 int atai 引数 */ /*******登録*******/ Sousa[0] = Sousa1; Sousa[1] = Sousa2; Sousa[2] = Sousa3; /******************/ printf("Sousa="); scanf("%d",&erabu); (*(Sousa[erabu + 1]))(50); return 0; } int Sousa1(int a){ printf("操作1です\n"); printf("値は%dです\n",a); return 0; } int Sousa2(int a){ printf("操作2です\n"); printf("%d + 3 = %d\n",a,a + 3); return 0; } int Sousa3(int a){ printf("操作3です\n"); printf("%d * 3 = %d\n",a,a * 3); return 0; }

yanees
質問者

お礼

わざわざプログラムまで教えていただき、ありがとうございます。是非参考にさせていただきます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

実行時に任意の関数を入力して実行するというのは、 Cのインタプリタを作ることに相当します。 CのインタプリタCINTで質問で言われているようなことができたと思いますが、一般的には現実的ではないと思います。 scheme などLISP系とか Perl やruby などのインタプリタ系の言語であれば、 言語自体にそのような評価関数を含むので簡単に実現できます。

yanees
質問者

お礼

回答ありがとうございます Perl やruby であれば、簡単に実現するということは、C自体、その分野に関して、Perl やruby よりも劣っているということなのでしょうか?