タグ

parsecに関するKGAのブックマーク (7)

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

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

    正規表現を超える - あどけない話
    KGA
    KGA 2009/03/09
  • inforno :: OreScriptがはやってるならパーサコンビネータの需要もあるのかな?

    近頃、 JavascriptでOreScript なんてのがちょっとはやっていたりしまして。 OreScript書くのにある程度ちゃんと動くパーサコンビネータがあれば便利かも、とおもったので以前書いたパーサコンビネータをいじってみました。 変更点 メソッド名などをHaskellにあわせた よくもわるくも、記号含有率をあげた(and -> $に、or -> l に) 相互再帰をサポートした 左再帰(chainl1)をサポートした 右再帰(chanr1)をサポートした ということで、そこそこの用途に耐えるものになったと思います。 ダウンロード 完全にアンドキュメントです。すみません。ただ、ソースは200行くらいなんで見ればわかるかと。というか、HaskellのParsecのマニュアルを読めば基一緒なので使い方がわかると思います。 ダウンロード サンプル id:amachangさんが書いていた

  • 駄目日記/2006年04月26日/Parsecを使ってみる。 - Haskellの駄目な使い方

    #blognavi このサイトでは最終的にHaskellで[[KISSローダー>http://www.kiss-wkp.com/]]を作るという野望があるわけで。 今回は、コンフィグファイルの読み込みで使うであろう、Parsecに手を付けてみました。 [[Parsecのサイト>http://www.cs.uu.nl/~daan/parsec.html]] Parsecを使えば簡単にLL(n)文法のテキストファイルを簡単に読み込めるようになるらしいです。(理論的なことはよくわかってない) 自分は、上記のサイトのparsec-2.0.zip をダウンロードしてきたあと、Hugsの作業フォルダにTextフォルダ以下を展開しました。こうすればとりあえずは使えるようになります。 (詳しくはHugsやGHCのマニュアルを読んでください) -Parsecの特徴 Yacc+LexやJavaCCが「文法ファ

    駄目日記/2006年04月26日/Parsecを使ってみる。 - Haskellの駄目な使い方
  • 2004-07-30

    実は昨日の話題はこれから書こうとする話とつながりがあるのだ。 (直接的には無いけど) (序) 突然であるが、Haskellは文字列処理が強力だと思う。 それも最強レベルに。 他のいわゆる文字列処理が得意であるとされる言語のように 正規表現による置換が可能であるとか、文字列がオブジェクトで 有用なメソッドがたくさん使えるとかそういった 小手先のものではなくてもっと根的なレベルで強力なのである。 それはHaskellに於いて文字列が文字のリストであらわされていることに 起因する。わからない人から見ると文字列がリストであるということは Cにおいて文字列が配列で表されているのとかぶるかもしれない。 Haskellが文字列をリストとして持っていてうれしいというのは Haskellが全言語中でもほとんど最強のリスト操作能力を持っているからである。 Cで文字列が配列になっていても何もうれしくないのは、

    2004-07-30
  • OMeta の電卓を parsec で作る。 - 言語ゲーム

    さて、http://jarrett.cs.ucla.edu/ometa-js/#OMeta_Tutorial にある OMeta の電卓の例をそのまま parsec で作ってみます。OMeta は言語に必要な処理を、文字解析に留まらず出来るだけ OMeta で行うのが売りです。また逆に parsec はパーサ特有の処理を、特別な言語を使わず Haskell だけで行うのが売りです。真逆で面白いので、OMeta と parsec を対比させる事で両者の特徴を浮き上がらせてみます。 module Main where import Text.ParserCombinators.Parsec import Text.ParserCombinators.Parsec.Pos( updatePosChar, updatePosString ) run :: Show a => Parser a ->

    OMeta の電卓を parsec で作る。 - 言語ゲーム
  • parsec - 言語ゲーム

    最近 Haskell に触ってなくて寂しいなあと思い、パーサーコンビネータと言うのを試してみました。まず import はこのようにします。 import Text.ParserCombinators.Parsec Parsec には便利なパーサの部品が沢山ありますが、勉強のためあえて自作します。まずある文字列の先頭が a の時だけマッチするやつを作ります。特定の文字にマッチするには char 関数を使います。char 関数以外は、パーサを駆動するだけのための部品です。 aParser :: String -> IO() aParser input = out (parse (char 'a') "error" input) where out (Right x) = print x out (Left err) = print err -- Main> aParser "abc" --

    parsec - 言語ゲーム
  • http://ja.doukaku.org/comment/6698/

  • 1