仕様変更、プラス。

| コメント(0) | トラックバック(0)

こないだ決めた呼び出し側の仕様を変更。


    WikiParser parser = WikiParser.getParser();
    WikiNode node = parser.parse("あいうえお");
    out.print(node.toString());


なんとなく、外部インターフェイス的にはこちらの方が自然な気がして。(プロジェクト名も WikiParser だし。。。)
またすぐ元に戻すかもしれないけど。

今回の目標であった「"\n\nあいうえお\nかきくけこ\n\n" を渡して "<p>あいうえお<br>かきくけこ</p>" を取得」はさらっと実装完了。

ここまではさらっと実装でいいんだけど、これから先の構文解析をどのように実装するかが問題。
以前のプロトタイプでは、正規表現でガシガシ分割、処理用のnodeを生成、委譲、と言う方針だったので、ソースはかな~りぐちゃぐちゃ。
拡張性も柔軟性もくそもない感じだったんだけど、今回はそうならないように良く考えなくては。

例によってデザパタ本をパラパラとめくってみて、今後使いそうなパターンをピックアップ。

  • 構文解析に Chain of Responsibilityパターン
  • 解析結果の出力に Visitorパターン

まだよく読んでみないと分からないけど、構文解析の時には

  1. 次の部分を処理するのはどなた?
  2. PreserveNode : 私じゃないよ
  3. BlockquoteNode : 僕じゃないよ
  4. ParagraphNode : じゃー、私が処理します。

みたいな流れで処理させればスッキリ書けそう。

出力は今は Object#toString() をオーバーライドして使ってるけど、Visitorを各自実装してもらうことで様々なフォーマットで出力ができるようになる気がするです。
この辺をAPIとしてしっかり仕様決めしてあげれば出力が柔軟になるかな?
#とうぶんは toString() でしょうけど。。。(^_^;;

この2つを組み合わせることの問題は、Visitorが訪問する相手(構文解析を誰が行ったか?)を覚えておかなければならない、もしくは適切に訪問できるよう導いてあげないといけないこと、かな。
この部分を考えるとあんまりうまくいきそうな気がしない。。。

とりあえず次回、ちょろっとやってみますかね~。
でわまた~~。

トラックバック(0)

トラックバックURL: http://happy-camper.st/mt/mt-tb.cgi/215

コメントする

2012年1月

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

月別 アーカイブ

CLOCK

あわせて読みたい

あわせて読みたい

ブログ通信簿

Yahoo!天気情報

AdSense

フィードメーター

RSS feed meter for http://ueshin.happy-camper.st/

トラックフィード

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 4.2-ja