タグ

.netとparserに関するsabroのブックマーク (2)

  • C#で書かれたパーサージェネレーターSpracheを使ってみた - tuedaの日記

    この間見つけたSpracheを試してみた。 SpracheはBison/Flexなどと同じ自分だけのDSLを作るためのパーサーを作るライブラリ。 この手のパーサーを1から書くのは非常に手間暇かかる作業で通常はやるべきではない。 (ただし職のコンパイラ書きを除く) SpracheはC#のみで書かれC#自体の強力さと相まって非常にシンプルにDSLをパースするクラスを作成できる。 ここでは試しにkey = value形式で書かれたファイルをパースする。 あまりにつまらない例だがゲームのコンフィグファイルとかこれで十分なことが多い。 ↓パースしたい文字列。 speed = 300 health = 100 weapon = 20 ↓パース後の値を保存するクラス。 最終的には上の例だとこれのインスタンスが3個取得できればいい。 public class Property { public stri

  • Ironyをいじってみた - ものがたり(旧)

    Ironyについては以前ちらっとだけ紹介したこともあるのだけど改めて。 parser generator .NETでプログラムを書いていて、テキストのパーサを作らなければならなくなることは割と普通にあるだろう。多くの場合はTextReaderを使って力技で書いて何とかするだろう。たとえばJSONくらいであれば、手作業で書いても難しくない。しかし、文法が複雑になってくると、たとえばC#のパーサを書けということになると、ある程度は状態遷移をロジックに任せると楽になる。 .NETで複雑なテキストパーサを書くのがどれくらい一般的なことかは分からないが、そういうものを実装するために使われるのがパーサジェネレータあるいはコンパイラコンパイラと呼ばれる仕組みだ。パーサジェネレータは、生成規則(構文)を所定の表記法で記述すると、それをもとにテキストパーサのコードを生成する。有名なのはCのコードを生成するy

    Ironyをいじってみた - ものがたり(旧)
  • 1