タグ

pegに関するmanabouのブックマーク (6)

  • Lua+PEGでiniをparseする - Qiita

  • Lua+PEGでiniをparseする - Qiita

    技術戦略室間野です。好きなうまるちゃんは家うまるです。どなたか次回までにアフィリエイトどこに貼れば良いか教えてください。 これイマイチSEOスコアが低いので他の話をする予定でしたが、今まさにparser書いたのと、概ね全言語にPEGモジュールがあったので考え直しました。100行のPEGは100行のRegExよりだいぶ読める。 PEGとは Perl6のsyntax parserです。 正規表現の代用 PEGで出来ることの99%は正規表現でも出来て、正規表現で出来ることの(略)PEGの実装は小さく、大抵Cのラッパなので速度もほぼ変わりませんが、どちらが上とかの話はしません。 ただしLuaおめえはダメだ Luaの正規表現は特殊で、{}や|が無いせいで、ロジックまで変わってしまい、PCREに移植不能になることがあります。PEGならどこにでも持って行けるので、LuaだけはPEGへの全置換を検討しても

    Lua+PEGでiniをparseする - Qiita
  • GolangとPEGで作る言語処理系 vol.1 - Qiita

    vol.1と言いつつvol.2を執筆しないと定評の高いerukitiです。こんにちは。(全文検索やrxjsの続き書こうと思いつつ…) 今日はGolangとPEGを使って、言語処理系を作る話の第一弾として、pointlander/peg の解説をします。 PEG? PEGでぐぐると、胃ろうとかいうのがヒットしますがそれじゃなくて、Parsing Expression Grammar です。簡単に言うとlexとyaccを足したみたいなジャンルの処理系で、字句解析付きのコンパイラコンパイラとか言えばピンと来るかもしれません。RFCを読んでる人ならBNFとか身近だと思うんですが、まぁその手の言語ルールを形式化したものの一種ですね。僕には学術的説明をするほどの知識はないので、厳密な話を知りたい人はいろいろぐぐってみてください。 expression <- additive additive <- m

    GolangとPEGで作る言語処理系 vol.1 - Qiita
  • PEGとC++11で作る言語処理系 - Qiita

    言語処理系の作成と聞くと、難易度が高いと感じるかもしれません。しかしパーサージェネレータなどのツールを活用することによって,その敷居はぐっと低くなります。 この分野では、BNFからパーサーを生成するYaccが有名です。最近では PEG(Parser Expression Grammar)も知られるようになってきました。PEGの特徴の一つは,構文ルールだけでなく字句ルールも同時に定義できることです。現在、主要なプログラミング言語のほとんどにPEGパーサージェネレータが存在します。中には抽象構文木(AST)まで生成してくれるものもあります。 こうしたツールの助けを活用すると,言語処理系の作成はかなり容易になります。PEGで文法を定義し,ASTを実行する評価器を実装すれば,あとはPEGライブラリの助けを借りて言語処理系を完成させることができます。 今回は拙作のPEGライブラリ cpp-pegli

    PEGとC++11で作る言語処理系 - Qiita
  • パーサコンビネータを高速化した - Object.create(null)

    例のアレです. 式年遷宮したときの話はこちら. github.com 最初は軽い気持ちで細々とした最適化をしていたんです. switch を if に変えるとかいう小手先のアレで 10 % も高速化してウケてる— ボノボ (@susisu2413) 2017年3月13日 インライン化も同時にしてたから 10 % は言い過ぎか、でも高速化はしてる— ボノボ (@susisu2413) 2017年3月13日 ちなみにどう最適化するかというと V8 のプロファイラを使って適当に遅そうなところに目星をつけて色々試します. そんなこんなで Parsimmon*1 より妙に遅い原因を探していたら, ap, left, right (Parsec*2 でいうところの <*>, <*, *>) の実装の効率が悪く, これが主な原因であることがわかりました. アッアッ 30 % 高速化しました— ボノボ (

    パーサコンビネータを高速化した - Object.create(null)
  • これで勝つる! 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のブログ
  • 1