Yantra - C++向けLALR(1)パーサジェネレータ

Show HN: Yantra – an LALR(1) parser generator for C++

Yantraは、C++で書かれた強力なコンパイラコンパイラ兼LALR(1)パーサジェネレータです。統合レクサ、UNICODE/UTF8サポート、ASTビルダー、ASTウォーカーを備え、ボトムアップ解析とトップダウン走査を組み合わせています。単一の.cppファイルを生成するアマルガメーションモードや、既存プロジェクトに組み込める分割モードも提供。Bison/Yaccとは異なり、完全なASTを構築してからトップダウンでセマンティックアクションを実行するため、親ルールのアクションが子より先に走ります。C++標準ライブラリ以外の依存がなく、CMakeで簡単にビルド可能です。

Yantraは完全なASTを最初に構築し、その後トップダウンで走査するため、親ルールのアクションが子より先に実行されます。
  1. MichaelMoser123

    幸運を祈るよ。

    昔は shift/reduce や reduce/reduce エラーを直す方法を知っていたんだが、それはずいぶん前の話だ。

    再帰下降パーサだと左再帰をチェックする必要があるが、こちらのほうがいくらか厄介さは少ないね。

  2. mingodad

    この話題に興味がある人には、Ben Hanson の https://github.com/BenHanson/parsertl17 もぜひ見ることを強く勧める。それをベースに、私はオンラインの LALR(1) プレイグラウンドをここ https://mingodad.github.io/parsertl-playground/playground/ に作った。そこでは約350個の非自明な文法を試せる(`Examples` ドロップダウンから一つ選び、`Parse` をクリックすると `Input` の入力に対するパースツリーが見られる。さらに EBNF も生成してくれるので、https://www.bottlecaps.de/rr/ui で見やすくナビゲート可能な鉄道図を作れる)。

  3. userbinator

    新しいパーサジェネレータが書かれているのを見るのは少し意外だ。ほとんどのコンパイラがとっくの昔に再帰下降/優先順位クライミングに落ち着いてしまった後なのに(今フロントページの近くにある https://news.ycombinator.com/item?id=49913192 も含めて)。

この日のほかの記事

2026-10-01