Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
次のような EBNF があるとします。
<Expr> -> <Term> {( + | - ) <Term>}
{} 括弧は、0 個以上を選択することを意味します。では、行を 1 文字ずつ読んでいるときの<Term>ように、ちょうど vs があるときはどうすればわかりますか?<Term> + <Term> + <Term>
<Term>
<Term> + <Term> + <Term>
再帰降下パーサーがあると仮定すると、やりたいことは1 つのトークンを先読みすることです。a を読んだばかりで<Term>、次のトークンが+orである-場合は、この生成に従います。そうでない場合、この<Expr>生成は完了し、呼び出し元に戻ります。
+
-
<Expr>
これをコードで実装するには、グローバルlookaheadToken変数のようなものが必要です。そのトークンを使用して、実際に特定のプロダクションにコミットしてトークンを消費する前に、解析を続行する方法を決定できます。
lookaheadToken