質問

私は、社内で20年前の独自の言語の強化を支援してきました。これは、大規模なチューリング完全言語です。別の文法体系(Antlrなど)に変換することはオプションではありません(これを決定することはできません)。

ほとんどの場合、文法の拡張はスムーズに進みました。しかし、時々私はそれをreduce-reduceまたはshift-reduceするでしょう

  • 排除するのは難しい
  • 場合によっては意味がありません(私の弱い脳にとって)

y.output ファイルと実験的な文法のリファクタリングを苦労してじっと見つめた後、私はいつも行きたいところに行きました。時には、不満足な妥協を迫られました。

では、yacc文法を吸い込み、ブラウジング、実験を強化し、変更のデバッグを可能にするツールはありますか?

プロダクションを追加する場合、「どこでも使用されるアトミックプロダクション」以上のものを見たいです。 (識別子を考える)"ルールfooと競合します" (はい、それより多くの情報、s / r、r / rがありますが、あなたは私のドリフトを得ると思います)。思考のキャップをかぶって、シンボルスタックとステートマシンを想像しようとする以上の相互作用のヒントがあればいいのですが。

更新:明確にする必要があると思います。バークレーヤックを使用しています。 Bisonの最新バージョンを使用してテストを行っています。出力用に、文法を-report = itemset でコンパイルしました。

この投稿の私の目標は、yaccに同梱されている文法デバッグ機能を拡張する外部ツールを探すことです。デフォルトの設定では今日はつらいです。 Antlrで使用できるツールなど、より優れたインタラクティブツールを見つけてください。

役に立ちましたか?

解決

might はデバッグ出力を生成する yacc -d からヘルプを得ることができます。これは基本的に、シンボルスタックの状態などの完全なリストを提供します。出力が密集していてボリュームが大きいので、すべてを直接読み取ろうとしてもほとんど達成できません(とにかく私にはありません)。ただし、変更により(たとえば)r / rの競合が発生した場合、古い文法と新しい文法で yacc -d を実行し、結果に対してdiffを実行して取得できます競合の原因となった変更に関する詳細な要約。

ただし、s / rの競合は多くの場合良性であることに注意する価値があります。問題があると確信している場合を除き、「修正」しようとします。多くの場合、価値がありません。ただし、r / rの競合については同じではありません。これらは良性である場合もありますが、比較的まれです。

編集:エラー-すみません、-vにしてください。 y.outputに言及しているので、その部分を行う方法をすでに知っているようです。ポイントは、y.outputファイルを直接見ようとはしないが、きれいに出てきたファイルと実際の競合に関する詳細を取得しなかったファイル(10数十万行の「もの」はそれで問題ありません。

他のヒント

これは私が得た最高のものです。 http://tldp.org/HOWTO/Lex-YACC-HOWTO-7。 html

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top