1

学校で、次の文法に従うトップダウン パーサーを Java で作成するように指示された宿題があります。

    assign = id , '=' , expr , ';' ;
    expr = term , [ ( ’+’ | ’-’ ) , expr ] ;
    term = factor , [ ( ’*’ | ’/’) , term] ;
    factor = int | ’(’ , expr , ’)’ ;

「IDがある場合、次のトークンが「=」で次がexprであるかどうか、その次が「;」であるかどうかを確認する」など、構文解析の基本的な概念は理解できたと思います。正しい?

ここで、着信入力が式であるかどうかを確認したい場合:

トークンをチェックして、用語があるかどうか、「+ トークン」または「- トークン」があるかどうか、最後に「expr」があるかどうかを確認します。しかし、そこに「expr」があるかどうかを確認すると、ループし、最終的に「expr」があるかどうかを再度確認し、何度も何度も確認します。

どうすればそれもうまくいくのかわかりませんか?誰かが私を助けることができますか?

敬具、

4

1 に答える 1

0

OPR ルールのコードが expr の解析ルールを呼び出すと、無限ループに陥るのではないかと心配しているようです。

彼は心配する必要はありません!

少し考える必要がありますが、C1 が呼び出されたときに実際に起こることは、呼び出された expr ルールが term をテストすることです。それが expr を構成する被加数のセットの最後の項である場合、後続のプラス/マイナスは存在せず、C1 呼び出しは終了し、親の解析ルーチンに戻り、完了します。ループなし。

それが最後の項でない場合、項が解析され、プラス/マイナスが表示され、C1 インスタンスが C2 を expr に戻す別の呼び出しを行います。この再帰は 1 つのループ反復のように機能し、説明したように処理されます。

うまくいくはずです。

于 2015-11-12T10:33:07.027 に答える