4

私は現在、いくつかの言語のパーサーを作成中です。私はこの言語の文法を与えられましたが、この文法にはいくつかの左再帰と非 LL(*) 構造が含まれているため、ANTLR はバックトラッキングを使用してもうまく機能しません。

これらの左再帰と非 LL(*) 構成を削除することは、一見したよりも難しいため、LR(k) または LALR(k) パーサー ジェネレーターを試してみたいと思います。k が高いほど良い。

これらの要件を満たすパーサージェネレーターを誰かに勧めてもらえますか?

  • 生成されたパーサーは、ある程度高い(または任意の)kを持つLR(k)パーサー、または少なくともある程度高いkを持つLALR(k)パーサーであることが好ましい。
  • 生成されたパーサーは C または C++ で記述されており、C で記述されている場合は C++ コードにリンク可能です。
  • ANTLR に似た機能セット (特に AST の書き換え) があればよいでしょう。
  • パフォーマンスは最も差し迫った問題ではありません。生成されたパーサーは、多くのメモリと CPU パワーを備えたデスクトップ マシンで使用することを目的としています。

ありがとう、
ジョスト

PS: 自分でググることができないので質問しているわけではありませんが、自分でいくつかのジェネレーターをテストする時間が残っていないためです。したがって、推奨されるパーサー ジェネレーターの使用経験がある場合にのみ回答してください。

4

3 に答える 3

4

あなたはLRSTARを検討するかもしれません。

ツール自体の経験はありませんが、著者に会ったことがあります。彼はかなり有能な人のようです。(私は生計を立てるために解析エンジンと関連技術を構築しています)。

于 2012-08-25T15:42:36.843 に答える
4

LRSTAR 10.0が利用可能になりました。比較ページでは、LRSTAR、ANTLR、Bisonの比較があります。LRSTAR は、同じ EBNF 演算子 (:、|、*、+、?) を使用して ANTLR のスタイル表記を読み取るようになりました。C++ で LR(k) パーサーを生成する C++ ベースのシステムです。パーサーは、自動 AST 構築とトラバーサルを行います。新しいバージョン 10.0 は、文法にアクション コードがない場合、Yacc/Bison 文法を読み取ります。

于 2013-05-15T22:08:59.350 に答える
3

DParserを使用することにしました。これは、コンテキスト フリー言語を認識できる GLR-Parser ジェネレーターです。よくプログラムされているように見えますが (ソース配布のテストを見てください)、ANTLR が提供する多くの機能、特に AST-Construction ツールが欠けています。

プラスとして、それは主にANTLRの文法ファイル形式を再利用します.これは私の文法が入っている形式です.

于 2012-08-29T11:58:46.293 に答える