0

次のような EBNF があるとします。

<Expr> -> <Term> {( + | - ) <Term>}

{} 括弧は、0 個以上を選択することを意味します。では、行を 1 文字ずつ読んでいるときの<Term>ように、ちょうど vs があるときはどうすればわかりますか?<Term> + <Term> + <Term>

4

1 に答える 1

1

再帰降下パーサーがあると仮定すると、やりたいことは1 つのトークンを先読みすることです。a を読んだばかりで<Term>、次のトークンが+orである-場合は、この生成に従います。そうでない場合、この<Expr>生成は完了し、呼び出し元に戻ります。

これをコードで実装するには、グローバルlookaheadToken変数のようなものが必要です。そのトークンを使用して、実際に特定のプロダクションにコミットしてトークンを消費する前に、解析を続行する方法を決定できます。

于 2013-01-16T04:35:39.987 に答える