『コンパイラ・スクリプトエンジン』 相談室 2at TECH『コンパイラ・スクリプトエンジン』 相談室 2 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト250:デフォルトの名無しさん 02/11/07 02:46 トラバースと逆の手順。 各ノードは子供と親のリンクを持つ。 <でノードを生成、現在処理中のノードへの参照を 親への参照として新規ノードへ設定。 その後で親に子として新規ノードへの参照を設定。 処理中のノードの参照として新規ノードを指させる。 >でシングルタグか開始タグか終了タグかを判断し 親に戻るかどうかを決める。 戻る時には処理中のノードの参照として 親を指させる。 こっちにドキュメントを置いてます。 サンプルソースはC++。 ソース玉は整理してないんで乱雑にメモテキストとか テストデータが散らかっててちょっと気が引ける。 https://sourceforge.jp/projects/frogger/ こういうドキュメントが欲しいとか 掲示板に投げておけばそのうち対処するかも。 251:デフォルトの名無しさん 02/11/07 02:55 >>248 rubyじゃできないな。 252:デフォルトの名無しさん 02/11/07 03:22 手抜き実装で考え方だけ。言語も適当。 loop token w = Tokenizer.next(); if w == 'object' then currNode := currNode.pushNewNode( Tokenizer.next()); continue; end if if w == 'end' then currNode := currNode.parent(); if currNode is null then break; continue; end if Tokenizer.skip(); currNode.pushNamedValue( w, Tokenizer.next()); end loop Node というクラスはツリーのノードを表す。 各ノードは子ノードとして、object か namedValue を持つことができる。 pushNewNode は object 子ノードとして追加して、その新規子ノードを返す。 引数はノードの名前を表す。 pushNamedValue は namedValue 子ノードとして追加する。戻り値はなし。 第一引数は値の名前、第二引数は値の中身。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch