タグ

PEGに関するkitokitokiのブックマーク (20)

  • これで勝つる! PEGベースのコンパイラコンパイラpaccに触れる - id:anatooのブログ

    PEG-MLにPEGベースのコンパイラコンパイラ、pacc-0.0のリリースが告知された。 今までyaccやbisonなどを使わなければならなかったパーサも、paccを利用すれば強力なPEGベースのメタ言語を使って記述できる。この記事ではこの登場したばかりのコンパイラコンパイラ、paccに触れてみた。 インストール コンパイルに必要なboostライブラリを予めインストールしておく。Macならhomebrewからインストールできる。 $ brew install boostソースコードをダウンロードしてきて解凍してmake。 $ tar -xvf pacc-0.0.tar.bz2 $ cd pacc-0.0 $ make エラーが出ずにpaccを叩ければ成功。なんか0.0のバージョン名なのかronin(浪人?)と書いてある。 ./pacc -v pacc 0.0 (rōnin) Writte

    これで勝つる! PEGベースのコンパイラコンパイラpaccに触れる - id:anatooのブログ
  • 第一回闇PHP勉強会開催&発表しました - id:anatooのブログ

    ブログ書くのが超遅くなりましたが第一回闇PHP勉強会を開催しました。この勉強会では、名前の通りあんまりPHPの光が当たらない部分をやろう的なテーマを掲げて行いました。発表者や参加者のレベルが高いこともあり、他の勉強会ではあまり触れられないことを扱ったユニークな勉強会を行うことができたのではないかと思っています。 発表資料 PHPでパーサコンビネータ入門 http://anatoo.jp/phpparsercombinator @anatoo OpenCLで拓くPHPの可能性 @rsky HashTableとHashDoS http://www.slideshare.net/taketyan/hash-table-hashdos @yuya_takeyama 詳細ぺちぺち http://www.slideshare.net/do_aki/ss-11304937 @do_aki 終わりに 第二

    第一回闇PHP勉強会開催&発表しました - id:anatooのブログ
  • Ruby Parsec - JParsec - Codehaus

    Jparsec is now ported to Ruby, with a way lighter syntax than Java. Calculator demo The following is the ruby version of calculator: 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(?-) >

  • Peggy - The Parser Generator for Haskell

    What is it Peggy is a parser generator for Haskell. It supports parsing expression grammer (PEG) which is simple and expressive. It can generate efficient packrat parser. Quick Start You can install Peggy from Hackage: $ cabal update $ cabal install Peggy Github repository is here. Easy to use Syntax of Peggy is very simple and easy to understand, so you can start writing practical parser immediat

  • GitHub - tolmasky/language: A fast PEG parser written in JavaScript with first class errors

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - tolmasky/language: A fast PEG parser written in JavaScript with first class errors
  • Route 477(2011-03-29)

    ■ [ruby] Ruby用のPEGパーサParslet via @frsyuki http://kschiess.github.com/parslet/index.html Ruby用のPEGパーサには既にTreetopがあるけど、エラー表示が改善されてたりするようだ。 Treetopは独自の文法だったけど、ParsletはRubyの内部DSLになっている。 また、Treetopは文法と同じところにアクションも書くけれど、Parsletは「Parser」と「Transformer」を別々に定義して組み合わせるというAPIになっている。 チュートリアルを見れば雰囲気はだいたい分かると思う。 とりあえず電卓(足し算だけだけど)。 Parserは構文木をHashとして返す。"1"@0みたいなのはParslet::Sliceのインスタンスで、0行目にある"1"という文字列を表している。.as(:

    Route 477(2011-03-29)
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • GitHub - kawabata/aozora-proc: 青空文庫プロセッサ。青空文庫の注記記法チェッカ&HTML等へのコンバータ

    aozora-proc.el … 青空文庫プロセッサ aozora-proc.el について 青空文庫の文法チェッカ・HTML5・LaTeX・IDMLへの出力を行うツールです。 特徴 青空文庫の注記を解析表現文法で解析し、中間データへ変換します。その ため、パーザ部分は実質的にプログラムコードがなく、簡潔に表記されます。 中間データからは、HTML5(縦書き・横書き), LaTeX縦書き・横書き), IDMLへ出力可能です。プラグインを作成すれば、他のマークアップ言語への変換も可能です。 UCS漢字とアクセント付き欧文のUCSに対応しています。現状では青空文庫 での利用が確認されている非JIS X 0208漢字8,000字程度が利用できます。 org-mode 等、既存のアウトラインプロセッサへの組込めるように、行単 位処理を行うAPIを提供しています。 シェルスクリプトからのバッチ処理

    GitHub - kawabata/aozora-proc: 青空文庫プロセッサ。青空文庫の注記記法チェッカ&HTML等へのコンバータ
  • EmacsWiki: peg.el

  • PEG.js | tnomuraのブログ

    JavaScript のパーサジェネレータを探していたら、やっぱりあった。Peg.js がそれだ。 PEG(解析表現文法)はWikipedia に詳しいが、パーサを記述する言語の一つで、語句解析部分がいらない、解釈の曖昧性がないなどの特徴を持っている。この解析表現文法を使って、JavaScript のパーサモジュールを作成するのが、PEG.js の働きだ。 ブラウザからも、JavaScript のコードからも、コマンドラインからも利用できるが、Online Version があるので、ブラウザで文法を記述して、コンパイルの結果をダウンロードするのが手っ取り早い。 そうは言っても、PEGでいきなり文法を記述しろと言われてもできはしないので、Online Version のデモのパーサをダウンロードして、利用してみたのが次の「PEG.js のデモ」ページだ。 PEG.js のデモページ デモペ

    PEG.js | tnomuraのブログ
  • Rui:ParsingExpressionGrammar

    (2006/12/13 20:22:55 PST): Ruiからページを分離しました。 Parsing Expression Grammar入力の抽象化バックトラックの制御命名規則文字列に特化したスキャナ怠惰な文字列構築エラーの通知参考文献開発記録性能目標 (2006/11/25 07:45:58 PST)PEGによる拡張可能な文法 (2006/11/23 18:19:07 PST)高速化手法の検討 (2006/11/21 19:24:29 PST)中間報告 (2006/11/21 08:34:45 PST)体への統合 (2008/05/20 04:26:20 PDT)とりあえずコミット Parsing Expression Grammar (2006/11/16 21:44:07 PST): HaskellのParsecのようなコンビネータパーザを作っています。コンビネータパーザは、再

    Rui:ParsingExpressionGrammar
  • Route 477(2008-10-23)

    ■ [prog] 正規文法、文脈自由文法、解析表現文法 について調べたのでまとめ。それぞれ Regular Grammer(RG), Context Free Grammer(CFG), Parsing Expression Grammer(PEG)とも。 解析表現文法はPEGって呼ばれる方がずっと多いよね。てかPEGが「文法」の一種であることを今まで分かってなかった(^^; 「パーズ関係の新しいやつでしょ」みたいな。 正規文法 < 文脈自由文法 =?< 解析表現文法 の順で、表現できる言語が増える。 (追記:CFG<PEGであるとはまだ証明されていないそうです(コメント欄を参照)) 正規文法はいわゆる正規表現のもとになったやつ。(現在のLLのRegexpは拡張されまくりなので正規文法以上のものも解析できる) 文脈自由文法はBNF記法で書けるやつ。 文脈自由文法(のサブセット)の解析方法と

    Route 477(2008-10-23)
  • PEG と 文脈自由文法の違い | tnomuraのブログ

    PEG (Parsing Expression Grammar) も 文脈自由文法もプログラム言語の文法を定義する方法だ。おまけに、どちらも再帰下降構文解析という手法で実装することができるので、一体どこが違うのかが分り難い。 そこで、原点に返って構文解析とはどのようなことをするのかを考えてみよう。プログラムのソースファイルに書き込まれているプログラムは単なる文字コードの並びが延々とづづいているだけだ。アルファベットを延々と書き並べられた紙のテープを渡されて解読しなさいといわれているようなものだ。 これでは取り付く島がないのでどうするかというと、このテープを単語などのまとまりごとに、小さく切っていく。この作業をしても単に単語が順番に並んでいるだけでは、意味不明だ。この単語の並びを関連ある物ごとに並べたり、関連性の階層を調べたりして、単語どうしの関連性の構造を見つけなければならない。この木構造

    PEG と 文脈自由文法の違い | tnomuraのブログ
  • http://treetop.rubyforge.org/index.html

    Treetop is a language for describing languages. Combining the elegance of Ruby with cutting-edge parsing expression grammars, it helps you analyze syntax with revolutionarily ease. sudo gem install treetop Intuitive Grammar Specifications Parsing expression grammars (PEGs) are simple to write and easy to maintain. They are a simple but powerful generalization of regular expressions that are easie

  • PEG の実装 - まめめも

    PEG 意見交換会に参加できなくて悔しいので、Ruby で書いた PEG の実装を晒します。 http://dame.dyndns.org/misc/misc/rpeg-20071125.zip 入力は Pappy 風の言語です。下は PEG のパーサを PEG で書いたもの (rpeg.rpeg) です。 parser RPegParser: { require "rpeg" KEYWORDS = %w(parser top debug) include RPeg } top grammar grammar = "parser":keyword name:identifier ":":sym c1:raw_code? "top":keyword top0:identifier tops:(",":sym t:identifier -> { t })* nts:nonterminal* c

    PEG の実装 - まめめも
  • PowerPoint Presentation

    PEG Example Generator (略してPEG) 稲葉一浩 (k.inaba) http://www.kmonos.net/wlog/ PEG意見交換会 (2007/11/25) 発端 ① WikipediaのPEGのページで勉強中 ② “The PEG Mailing List” なるものを発見 ③ ログ読み開始 ④ 一番最近のスレッドが… 発端 俺 APG っていうパーザジェ ネレータ作ってるんだけど、 これと PEG ってもしかしてめ ちゃめちゃ似てない?? トーマスさん 発端 APGってよく知らないけど A ← „a‟ A „a‟ / „a‟ って文法が「‘a‟が奇数個並 んだ文字列」じゃなくて「‘a‟ が2n-1個並んだ文字列」に マッチするなら、PEGぽいね シュミッツさん つまり • PEG では A ← „a‟ A „a‟ / „a‟ は ”aaaaa” の全体

  • Parsing Expression Grammar - Wikipedia

    Parsing Expression Grammar(PEG)は、分析的形式文法の一種であり、形式言語をその言語に含まれる文字列を認識するための一連の規則を使って表したものである。PEGは再帰下降構文解析を文法を示すためだけに純粋に図式的に表現したものと見ることもでき、具体的な構文解析器の実装やその用途とは独立している。 PEGにおける構文(文法)の定義は文脈自由文法のバッカス・ナウア記法によるそれに似ているが、文脈自由文法では一般に「|」(縦棒、バーティカルバー)で表される「これらのうちどれか」ではなく、「最初の解析がうまくいったらそれを、失敗なら次を順に試してゆき、成功したものを採用」(「/」であらわす)という意味を使う。 このため、文脈自由文法とは異なり、PEGには曖昧さは存在しない。文字列を構文解析する場合、正しい構文木は常に1つしかない。このためPEGはコンピュータ言語の構文解析

  • 正規表現と文脈自由文法の話 - val it : α → α = fun

    http://d.hatena.ne.jp/wasisan/20090321/p1 まず一言。E-Mailアドレスにのみ正しくマッチする正規表現というものは存在しません。それから、RFCではこういうのはたいていBNFで記載されているので、文脈自由文法が使えるならかなりそのまんまで書けるので非常に楽です。 一方で、「正規表現来の目的=トークンの記述」というのには首をかしげます。grep使ったことがないんでしょうか。メールアドレスを正規表現でマッチさせるというシチュエーションはいろいろ考えられますが、MTAやちゃんとした MUAを実装するのでもない限り、よくある用途は「メールアドレスフィールドに突っ込まれたユーザの入力がメールアドレスっぽいかどうか検証する」といった程度のものであり、すなわちhttp://hal456.net/qdmail/validationで書かれているような程度のことで

  • PEG基礎文法最速マスター - kmizuの日記

    Scala基礎文法最速マスターを書こうか迷っていたら、既にyuroyoroさんに書かれてしまったので、ちょっと違う方向で。BNFを既に知っている人は、これを読めばPEGの基礎をマスターしてPEGを書くことができるようになるでしょう(ほんとか?)。 基 Parsing Expression Grammar(PEG)はBNFに似ているけど、ちょっと(かなり?)違う文法の表記法です。BNFはその文法がどのような言語を表現しているかを定めるのに対して、PEGは入力がどのように解析されるかを定めます。PEGとBNFの一番大きな違いは、PEGには曖昧さが無いことです。たとえば、プログラミング言語のif文を表現する次の擬似BNFには曖昧さがあります。 statement ::= if_statement | ...; if_statement ::= IF LPAREN expr RPAREN sta

    PEG基礎文法最速マスター - kmizuの日記
  • 「Metal」 based on Parsing Expression Grammar - 古橋貞之の日記

    Parsing Expression Grammar (PEG)をベースとした構文解析器を生成するパーサジェネレータMetalを作りました。Rubyで書かれており、Rubyのコードを生成します。 Metalの多くはOMeta: an Object-Oriented Language for Pattern MatchingをRubyに移植したものです。 Metalの特徴: Rubyでアクションが書ける オブジェクト指向(継承、Mix-in、委譲、オーバーライド、super) PEGの特徴はそのまま 曖昧さが無い 左再帰が書けない(いまのところ) メモ化する ソースコードはCodeRepos:/lang/ruby/metalにあるので、ガツガツいじれます。 使い方 Ruby gemsでインストールできます。 $ gem install metal 文法定義ファイルを書いて、metalコマンド

    「Metal」 based on Parsing Expression Grammar - 古橋貞之の日記
  • 1