人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ソースコードをツリー構造を持つオブジェクトとして解析したいと思っています。
汎用的なパーサー(?)や決まった手順があるんじゃないかと思っているのですが、知識不足で調べきれませんでした。
具体的にはZoho Creatorというサービスで生成されるコードです。
http://www.zoho.jp/service/zoho-creator.html
コメント欄にソースの先頭付近を書いておきます。
言語の知識も不足していて、何にもっとも似ているのか判断できません。
ライブラリなりヒントなり教えていただけると助かります。
できれば.net、もしくはPerlで処理できるのが望ましいです。


●質問者: memo77
●カテゴリ:コンピュータ インターネット
✍キーワード:.NET Perl Zoho オブジェクト コメント欄
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● pahoo
●35ポイント

パーサそのものを生成できる yacc が第一選択肢でしょう。Linux であれは普通に使えます。

Windows環境では kmyacc が便利でしょう。

◎質問者からの返答

なるほどー。参考になります。


……が、これを使いこなして正しくパースするには1週間ぐらいかかるか。

ガリガリ書いたほうが早いかもなあ。


今後のために勉強するかもですが、もし他に簡単そうなネタをご存知の方がいましたら引き続き回答募集中です!


2 ● りゅう
●35ポイント

抽象構文木(AST:abstruct syntax tree)を構築して、それを使って処理をするということになると思います。

抽象構文木というのはノードが演算子やリテラル、変数名になるようなツリー状のデータ構造です。

ASTを生成する為には以下の手順が必要になります。


  1. BNF(Backus-Naur Form)で文法を定義する
  2. 文法定義に基づいて、テキストからトークンを切り出すレキサ(スキャナ、トークナイザとも言う)と、トークンの並びを解析してASTを構築するパーサを作る

ASTを生成して終わりってことはほとんど無いので、汎用的なものは無いようです。

通常はyaccなどの汎用のパーサジェネレータを使ってパーサを作ることになります。

ちなみにパーサジェネレータはレキサを生成してくれません。これは結構罠です。


.NETで使えるパーサジェネレータにはjoyというものがあるようです。

http://diary.lightnovels.net/mass/20030211.html#p06


PythonでよければSparkモジュールを使うのがGenericASTBuilderクラスがもあって色々楽そうです。

魅力的なPython: Sparkモジュールを使った構文解析

http://www.ibm.com/developerworks/jp/linux/library/l-spark/index...

◎質問者からの返答

いろいろ用語を書いていただいたので、調査が楽になりました。ありがとうございます。

クラスとしてすでに存在してプロパティをセットしていくことで構文解析できるほど汎用化するのは無理っぽいですね。

joyはすぐ使えそうなので、ヒマをみて触ってみることにします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ