8

パーセクで遊んでいて、文法が曖昧であることに気づきました。明らかにそれは私の側のエラーですが、私は私が愚かであることを私に知らせるyaccスタイルのパーサジェネレータにある程度慣れています。パーセクは、パーセクを指定した順序で文字を食べるだけです(ええ、私は知っていますtry)。

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

ありがとう!

(shift-reduceは、別の種類のパーサーテクノロジーと関係があることを知っています。単に、あいまいな文法を説明することを意味します。)

4

1 に答える 1

8

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

言い換えると、文法はあいまいかもしれませんが、Parsecパーサーはそうではなく、プログラムには、同等の入力に対して異なる出力を生成するparsecコンビネータの他の配置も有効な表現であると判断する方法がありません。不特定の文法。

あなたは文法を持っているので、あなたは幸せでアレックスを使うことを好むかもしれません、それはあなたにはるかに多くのlexx/yaccのような経験を与えるでしょう

興味深いプロジェクトは、BNFCを適応させて、文法を表すパーセクコンビネータのASTを生成することかもしれませんが、これは簡単な作業ではないと思います。

于 2012-08-29T07:10:02.400 に答える