[BlueLeaf1336]> PROBLEMS> GlyphGraph>

GlyphGraph - What's this?

historyTOP

2004/04/14:作成
2004/04/15:更新。解放処理が適当すぎたのでソース削除。

overviewTOP

無謀ココに極まれり、というわけで新シリーズ「グラフ計算機(?)を作ろう」です。まず始めに断っておかなければならないのは、(今はどうか知りませんが、かつてはアップルメニューの中にあった)「グラフ計算機」とは全くコレッポッチも耳糞ほども関係のないモノだということです。それからいくらでも高速高機能な奴が作成されています。
ですが、いつものとおり、自分で作りたいというわけです。

名前の由来ですが、グラフグラフグラフ...ぐりとぐら...ぐりふぐらふ...GlyphGraph...。みたいな感じで。いつも名前がちょっとヨイカンジの奴は本体がしょぼくなりがちで、名前も適当な奴は本体がしょぼくなりがちで、どちらにしても本体はアレです。

とりあえずの目標(妄想ともいいます)では


ここまで書いて既につぼに足がはまってきた感じがするので嫌なことは忘れて、先に文字列の解析部分のでき上がったところまでについて書いておきます。まず参考にさせてもらったサイトから。
タイトルの通り、Cの講義ノートみたいな感じですが、これをもとに翻訳したり整理したりわやくちゃにしたりしながらDelphiに書き直したのが次のプログラムです。

ダウンロードファイル:20040414GlyphGraph.zip(173,576bytes)

何が楽しいのか全く分からない画面。とりあえずてっぺんの文字列を解析して演算子とか数値とか判断して再構成したのが2段目で3段目は逆(?)ポーランド記法で書いたものです。3段目はあってるのかどうか分かりません。

上の実行画面は、次のコードで処理しています。

procedure TForm1.Button1Click(Sender: TObject);
var
    Exp: TTokenizer;
    Node: TNode;
begin
    try
        Exp := TTokenizer.Create(Edit1.Text);
        Node := Exp.GetExp();
        Exp.Free;
        Edit2.Text := Node.PrintExp();
        Edit3.Text := Node.PrintPolish();
        Node.Free;
    except
        ;
    end;
end;

まあ、その、クラスにまとめて解析やらなんやらをやってますよ、ということです。それから、文法的に変な場合は例外が発生します、見事に。
今のところは、「^ =」に対応していないので、それをやるとして、実際の計算をやる必要があります。そこまでやってはじめてグラフに...となるはずなのでまだまだですね。

EOFTOP