2009-10-28 5 views
10

私は私の会社の中で20歳の独自の言語を補強するのを手伝ってきました。これは、大きな、チューリング完全な言語です。それを別の文法体制(Antlrなど)に翻訳することは選択肢ではありません(私はこれを決めることはできません)。Yacc文法デバッガはありますか?

ほとんどの場合、文法の拡張はスムーズに行われました。しかし、すべて一度しばらくの間中、私は、削減削減またはシフト削減

  • は時々ちょうど(私の弱々しい脳に)意味がありません
  • を排除することは困難であることを得るでしょう

y.outputのファイルと実験的な文法のリファクタリングで苦労して多くのことを見つめた後、私は通常どこに行きたかったのですか?時々私は不満足な妥協をしなければならなかった。

yaccの文法を吸い取ることができるツールはありますか?ブラウジングを強化し、実験を行い、変更のデバッグを許可しますか?

プロダクションを追加した場合、「どこでも使用されている原子生産」(思考識別子)「ルールfooとの競合」よりも多くを見たいと思います(はい、s/r、r/r、それよりも、私はあなたが私のドリフトを得ると思う)。私の考えを覆し、シンボルスタックと状態機械を想像しようとする以上の相互作用のヒントを持つことはいいことです。

更新:私は明確にすべきだと思います。私たちはBerkeley Yaccを使います。私は最近のバージョンのBisonを使ってテストしています。出力のために、文法を--report = itemsetとコンパイルしました。この記事で

私の目標は、オーグメント文法のデバッグ機能のyaccと船外部ツールを模索することです。今日はデフォルト設定で痛いです。 Antlrで使用できるような優れた対話型ツールを見つけるのに役立ちます。 - それは、基本的には完全なシンボルスタック状態のリストと、そのようなを与える http://tldp.org/HOWTO/Lex-YACC-HOWTO-7.html

答えて

7

あなたデバッグ出力を生成しyacc -dからいくつかの助けを得る可能性があります:

+0

あなたが何を意味するのか分かりません。どちらのyaccsでも-dは "トークンマクロのヘッダファイルを出力する"ことを意味します。 スイッチ--report = itemsetの使用に関する詳細を追加しました。これはあなたが意味するものですか?すべての状態遷移情報からいっぱいのファイルy.outputを生成します。私はそれを使用していますが、より強力でインタラクティブなツールを望んでいました。 –

+1

Jerryが正しいです、S/Rの競合は必ずしもバグではありません。ほぼすべての実際の文法にはたくさんのものがあります。 – DigitalRoss

2

これは私が得た最高です。出力は高密度でボリュームがあるので、すべてを読み込もうとすると直接的にはほとんど成果を得られません。しかし、あなたがr/rの競合などを変更した場合は、古い文法と新しい文法についてyacc -dを実行してからdiffを実行して、より詳細な実行結果を得ることができます紛争が起こった。

しかし、S/Rの競合は問題があると確信していない限り、しばしばそれは価値がないことがあります。同じことがr/rの競合には当てはまりません。これらはですが、時にはという良性ですが、比較的まれです。

編集:申し訳ありませんが、それは-vである必要があります。あなたはy.outputに言及しているので、明らかにすでにその部分を行う方法を知っています。要点は、y.outputファイルを直接見てみるのではなく、きれいに出てきたファイルと実際の競合について詳細を知りませんでした(10で見つからない

+0

ありがとう、私はすでにyacc自体のこれらの機能を使用しています。時には、時には十分な気分にならない。 ; ^)〜 –

関連する問題