相模さん、こんにちは。
回答はQ&Aのコーナーに書きましたが、ご指摘通り「ポーランド記法」というのが正解です。
書きのURLにてご覧下さい。
LSI−Cの中間コードを見ていて思ったのですが、式の表記がはじめてみる形です。
逆ポーランド記法に似ていますが、演算子が先にかかれています。
もしかしてこれは「ポーランド記法」なんだろうか?
「逆ポーランド記法」の「逆」ってなんだろうと思っていましたがこういう事なのでしょうか?
知ってる方がいたら教えてください。
席亭の徳丸です。
安いレンタルサーバー(CGI可)のお試し版というのを使い始めたので、掲示板を自作のもの
に移行しようと思っているのですが、Perlはあんまし詳しくない(でもプログラミングは好き
だから自分で作りたい)ので、掲示板のファイル構造をどうしようかと迷っています。今考え
ているのは、いわゆる2ch方式の簡易版で、スレッドごとにコメントをつけられる(但しコメ
ントのコメントはできない)ようなものです。
SQLは使えないサーバーなので、ファイルでやるしかありませんが、ふつー、こういうのは
どういうファイル構造を取るものですかね。スレッド毎にディレクトリを作ろうかとね思うの
ですが、ちょっと重いような気もします。
掲示板CGIのソースはそこらじゅうで手に入りますが、設計情報はあまり見かけないのです。
ご存知の方は教えていただけませんか?URLとかでも結構です。
〉 int rinf = TRACE(引数) ;
〉という形式で挿入すれば、宣言文の間に入れてもコンパイルエラーも出ず、問題なく動きます。
そういうことですか。ようやく分かりました。要は、各関数の先頭でTRACE関数(マクロか?)
が実行できれば良いのですね。
であれば、関数定義の位置さえわかればよいので、これはRatforプリプロセッサと似た実装は
できそうな気がします。
>>あることというのは、既存のソースファイルにトレース文を自動挿入するツールを
>>作成することです。入れる場所は各モジュールの宣言文と実行文の間。
>
>これって、プロファイラのようなものでしょうか?しかし、ターゲット言語が、
>Cは良いとして、C++になると「宣言文と実行文の間」っていうのが、そもそもあり?
>と思ってしまいました。
>
C++は問題ありません。困難だったのはCなんですが、NET上である情報を
頂き、解決できそうです。
方法は、
int rinf = TRACE(引数) ;
という形式で挿入すれば、宣言文の間に入れてもコンパイルエラーも出ず、問題なく動きます。
>1ファイル複数モジュールの場合もあるので、それにも対応する。
>
>これ自体は難しくなさそうですね。モジュール=関数と考えて良いのでしょうか?
>
そうです。
上記手法で問題を1つ解決できたので、あとはモジュール名とモジュールの位置さえ
検索できれば障害をクリアできます。
何か具体的にいい手法をお知りでしたら是非教えて下さい。
>ひょっとしてもうお読みになっているかもしれませんが、カーニハン達が書いた「ソフト
>ウェア作法」という本の中に、Ratforプリプロセッサの作り方が載っています。これは、
>Ratforという構造化FortranをFortran IV(77以前の)に変換するものです。作り方として
>は、構文全てを解析しないで、必要最小限だけやっています。
> これなんか、参考になるかもしれません。
>
本屋で探してみます。
ももくり3年さん、はじめまして。席亭の徳丸です。
〉あることをやりたくて、いろいろ探しているうちにここへたどり着きました。
ようこそいらっしゃいました(^_^)
〉あることというのは、既存のソースファイルにトレース文を自動挿入するツールを
〉作成することです。入れる場所は各モジュールの宣言文と実行文の間。
これって、プロファイラのようなものでしょうか?しかし、ターゲット言語が、
Cは良いとして、C++になると「宣言文と実行文の間」っていうのが、そもそもあり?
と思ってしまいました。
〉1ファイル複数モジュールの場合もあるので、それにも対応する。
これ自体は難しくなさそうですね。モジュール=関数と考えて良いのでしょうか?
〉また、モジュール名の検索も行う。
〉ってまあざっとこんな感じなのですが、これってほとんんどコンパイラに
〉近いものを作らないと無理なのかなって思いはじめました。
確かにそうですねぇ。
〉現在は四苦八苦してファイルを行単位で読み込んで、コメントスキップや宣言文判断等の
〉処理を作って試してはいますが、なかなかうまくいきません。
ターゲット言語がCやC++だと、typedefがあるのでやっかいですね。正攻法でやるなら、
ちゃんと構文解析をするはめになると思います。C/C++のパーサーを探してきて、改造する
くらいしか思いつきませんね。
〉どなたか、いい方法を知っていたら教えて下さい。
ひょっとしてもうお読みになっているかもしれませんが、カーニハン達が書いた「ソフト
ウェア作法」という本の中に、Ratforプリプロセッサの作り方が載っています。これは、
Ratforという構造化FortranをFortran IV(77以前の)に変換するものです。作り方として
は、構文全てを解析しないで、必要最小限だけやっています。
これなんか、参考になるかもしれません。
あとは、ターゲットのファイルに制約をつけるかですねぇ。C/C++の文法全てを許すとな
ると、yaccで作っても結構厄介です。typedefの扱いが面倒なんです。まさか、typedefを
許さないというわけにもいかないでしょうしねぇ(C++の場合はclassも使えなくなる・・・
非現実的です)。
あることをやりたくて、いろいろ探しているうちにここへたどり着きました。
あることというのは、既存のソースファイルにトレース文を自動挿入するツールを
作成することです。入れる場所は各モジュールの宣言文と実行文の間。
1ファイル複数モジュールの場合もあるので、それにも対応する。また、モジュール
名の検索も行う。ってまあざっとこんな感じなのですが、これってほとんんどコンパイラに
近いものを作らないと無理なのかなって思いはじめました。
現在は四苦八苦してファイルを行単位で読み込んで、コメントスキップや宣言文判断等の
処理を作って試してはいますが、なかなかうまくいきません。
どなたか、いい方法を知っていたら教えて下さい。
対象ファイルはC及びC++です。
よろしくお願いします。
Issonさん、URLを調べてくれて、ありがとうございます。
さっそくこれから・・・と言いたいところですが、急遽海外出張が入ったものですから、
ちょっとすぐには手がつきそうにありません。PCは持っていく予定なので、見れないことは
ないですが・・・どうなりますやら(^^;
まずはお礼まで
徳丸さん、こんにちは。
うちのHDDをいろいろ漁っていたらreadme.txtがでてきました。
そのなかにURLが書かれていたのでお知らせしますね。
http://www.it.uq.edu.au/groups/csm/dcc.html
Issonさん、お久しぶりです。
〉逆コンパイラらしきもの?ならソースがありますよ。どこで見つけたか忘れましたけど。
〉(Generates C code for each procedure.の記述がある)
〉ソースをDLしてコンパイルしてみたのですが使い方が分かりませんでした。
〉ちょっと僕では手に負えないんですが、誰か見てもらえませんか
これは見てみたいですねぇ。URLはわからなくなったんですよね。
もしサイズが大きいものでなかったら、メールかなにかで送ってもらえませんか?
もちろん、再配布条件にもよるでしょうが・・・