0

数日前に、EBNF 文法を CFG に変換する方法について投稿しました。さて、私は今それの要点を持っていると思いますが、私はこの特定のものに少し行き詰まっています:

どのように変換しますか:

MultiplicativeExpr -> PrimaryExpr (( '*' | '/' ) PrimaryExpr)*

CFGに?

ここでの私の試みは、末尾の * (0 以上を意味する) を取り除き、それを再帰的な書き方に置き換えることです。

4

1 に答える 1

0

あなたは正しい考えを持っています。追加の変数 (再帰的) を使用すると、次のように実行できます。

MultiplicativeExpr -> PrimaryExpr SignExprList
SignExprList -> ε | '*' PrimaryExpr SignExprList | '/' PrimaryExpr SignExprList

もちろん、これが唯一の方法ではありません。たとえば、 のようなことSign -> '*' | '/'をして、それをSignExprList...

于 2011-10-04T20:39:10.373 に答える