1

私を夢中にさせる質問があります。それらを理解するのを手伝ってください:

1. LR(1) では、パーサーは指定された時間内に入力を探し、次の入力を探してから、シフトまたは削減を意味する決定を下すことを決定します。LR(0) パーサーがそうでない場合入力を見て、パーサーが入力を認識できないかどうかをどのように判断しますか?

ぶら下がっているelseの問題で:

 s--->   if a then s |
    if a then s else s 

なぜこの文法は LR(1) ではないのですか?

LR 構文解析ではボトムアップに進むため、最初に「if」をシフトし、次に「a」をシフトし、次に「then」、「s」をシフトします。その後、先読みトークンが「else」の場合は確認しません。 2番目のステートメント全体を取得するまでreduceします。それが「else」でない場合、最初のステートメントでreduceします。それで、`shift-reduceの競合はどこで発生するのでしょうか?

4

0 に答える 0