タグ

parserとpegに関するmanabouのブックマーク (3)

  • 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
  • パーサコンビネータを高速化した - 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