2012-08-29 8 views
8

私はparsecで遊んでいて、あいまいな文法があることに気付きました。明らかにそれは私のところでは誤りですが、私はyacc形式のパーサージェネレータに慣れています。 Parsecはあなたがパーサを与える順序で文字を食べるだけです(ええ、私は約tryを知っています)。parsecが "shift-reduce"競合を報告する方法はありますか?

私の文法が残っていないときにparsecに教えてもらう方法はありますか?私のために働くプログラムは素晴らしいです。

ありがとうございます!

(私は単に曖昧な文法を記述することを意味する。シフト削減は、パーサー技術の別の種類に関係していることを知っている。)

答えて

8

私はParsecの専門家ではないよ、私は修正される可能性が高いですParsecが文法について何も知らないという単純な理由から、これは可能だとは思わない。

文法が曖昧であるかもしれないが、あなたのParsecパーサはそうではなく、プログラムは、同等の入力に対して異なる出力を生成するparsecコンビネータの他の配列も決定する方法がない不特定の文法の有効な表現。

文法があるので、happyalexを使用すると、より多くのlexx/yaccのような経験が得られます。

興味深いプロジェクトは、BNFCに文法を表すparsec結合子のASTを生成することですが、これは重要ではないと思われます。

関連する問題