私を夢中にさせる質問があります。それらを理解するのを手伝ってください:
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の競合はどこで発生するのでしょうか?