4

似たようなタイトルの投稿がいくつかあることは知っています。ほとんどが死んだサイトへのリンクです - とにかく、もっと具体的な質問があります。

Bison 互換の文法ファイルを簡単に作成できるように、XPath 仕様の EBNFをストレート BNFに変換しようとしています。

これを行ってからしばらく経ちましたが、再帰がプロダクションのどちら側に属しているか覚えていません。私はそれが左だと思っていました - しかし、私の「単純な」翻訳は、Bison が生成したパーサーを実行すると、単純なジェーン XPath 式で構文エラーを引き起こします。

だから誰かが私をユーモアを交えて考えてくれるなら - だから私は幽霊を追いかけていない.

以下のExprルールでは:

Expr::=     
    ExprSingle ("," ExprSingle)*

これは正しい翻訳ですか?(再帰を左に置く):

Expr::= 
    Expr "," ExprSingle
    | ExprSingle
4

2 に答える 2

4

それはいいです....

再帰を右側に置くこともできますが、それは機能するはずですが、パーサーは再帰の背骨を追跡する必要があるため、「より多くの作業を行う」必要があり、そのためにはより多くのスタックの場所を使用する必要があります。

于 2012-01-30T20:09:38.630 に答える