タグ

haskellとparserに関するjjzakのブックマーク (7)

  • 正規表現を超える - あどけない話

    まずは、Audrey さんが言った Haskell の殺し文句を思い出して頂きたい。 正規表現ベースのパーサはメンテナンスしにくいのに気づいた? Parsec を使って 15分で Perl6 の完全なパーサを書く方法を勉強しましょう。 15分というのは誇張が入っていると思うが、正規表現が保守しにくく、Haskell の Parsec は強力で保守し易いのは事実だ。その理由を Perl と Haskell のコードを示しながら説明してみたいと思う。 Perl を愛する方に:この記事は Perl を攻撃するために書いたのではない。Perl を選んだのは、正規表現を広めた言語であり、僕がそれなりに Perl のコードを書けるためである。この記事の目的は、正規表現よりも関数型パーサー(Parsec)の方が優れていると示すことだ。 例題 この記事では例題として、IPv4 アドレスを解析する関数を書く

    正規表現を超える - あどけない話
  • Language.C を使ってみる with Data.Generics - らくがきえんじん

    Language.CはHaskell用の、C言語のソースコードを構文解析するライブラリ。 構文木はHaskellのデータとして操作可能で、これのおかげでC言語のコードを色々と操作できる。意味解析に役立ついくつかの補助関数も定義されているようだ(よく調べてない)。 やったこと、動機 JHC (Haskellのコンパイラ;ISO C互換のコードを吐く)は C99のコードを吐くようだ ツールの制約でgcc 2.95(19991024)しか手元にない。 gcc 2.95はC89しか受け付けないようだ jhc が吐くコードを gcc 2.95 でコンパイルできるよう自動変換したい そこで Haskell用の Cパーザである Language.C を使って、JHCが吐くコードを gcc 2.95でコンパイルできるように変換する。未完。 C89では 変数宣言が ブロックの頭以外に来たらエラー。全ての変数

    Language.C を使ってみる with Data.Generics - らくがきえんじん
    jjzak
    jjzak 2008/08/21
    Language.CはHaskell用の、C言語のソースコードを構文解析するライブラリ。
  • オフサイドルールの処理 - soutaroブログ

    予習編.たまーに,YAMLのパーサとか欲しくなるんだけど,インデントの処理をどうやったら良いのかよくわからなくなって困っていたんだけど,勉強になった. Haskell 98 Syntaxにこと細かに書いてあるので,適当に実装してみた. http://svn.soutaro.com/has/tags/offside-rulesにありますので,適当にチェックアウトして,ocaml-3.10とかfindlibとかextlibとかインストールしたうえでmakeしたらできます.標準入力からHaskellプログラムを読み込んで,オフサイドルールを処理したやつ,つまり適当に{}とか;とか追加したトークン列を出力します. let fac3 0 = 1 fac3 n | n > 0 = n * fac (n-1) みたいのが, { let { fac3 0 = 1; fac3 n | n > 0 = n *

    オフサイドルールの処理 - soutaroブログ
    jjzak
    jjzak 2008/01/26
    OCaml での Haskellオフサイドルールの処理
  • Parsec, 高速なコンビネータパーサ

    文書は次に掲げる URL で示される文書の部分的な邦訳です。 http://www.cs.uu.nl/people/daan/download/parsec/parsec.html Parsec, 高速なコンビネータパーサ Daan Leijen University of Utrecht Dept. of Computer Science PO.Box 80.089, 3508 TB Utrecht The Netherlands daan@cs.uu.nl, http://www.cs.uu.nl/~daan Parsec, 高速なコンビネータパーサ Daan Leijen University of Utrecht Dept. of Computer Science PO.Box 80.089, 3508 TB Utrecht The Netherlands daan@

  • ICS | Utrecht University

    This is a website used by the ICS in education. If you are looking for more information on our department, go to Information and Computing Sciences. Information regarding your courses can be found in Blackboard. General information regarding ICS courses can be found in Osiris catalog. The archive of the technical reports of our department can be found in Department of Information and Computing Sci

  • Harroth

    Pugsの勉強をしようと考えている方は、以下のリソースを読むと面白いかもしれません。 Harrothチュートリアル ソースコード Harrothチュートリアルでは、Forthというプログラミング言語のパーサをHaskellで実装しながら、パーサについての理解が深められるように書かれています。しかし残念な点が2点あります。第一に、説明で出てくるコードと実際のソースコードに若干の違いがあり、読者の理解を妨げていることです。*1第二に、パーサの核になる部分のコードが欠落していることです。よく書けているチュートリアルなだけに、当に残念でした。 あと少しのピースがあれば、完成しそうだったので、代わりにそのピースを作ってみました。何回も試行錯誤してパーサが完成した時は、当に感動しました。 そのパーサのコードは以下の通りです。 % vim MyForth.hs {- MyForth - An Imp

    Harroth
  • JParsec - Ruby Parsec

    Jparsec is now ported to Ruby, with a way lighter syntax than Java. require 'rparsec' include RParsec class Calculator include Parsers include Functors def parser ops = OperatorTable.new. infixl(char(?+) >> Plus, 20). infixl(char(?-) >> Minus, 20). infixl(char(?*) >> Mul, 40). infixl(char(?/) >> Div, 40). prefix(char(?-) >> Neg, 60) expr = nil term = integer.map(&To_i) | char('(') >> lazy{expr} <<

  • 1