LALR(1) DFA passer ikke.
Jeg sidder med et meget mystisk problem. Jeg laver en LR(1) DFA for at lave den til LALR(1) men der er ikke nogen states der kan kombineres ud fra hvad jeg kan se.Problemet her er at ifølge min bog så vil antallet af states i den være det samme som i en LR(0) for den samme grammar efter den er lavet til en LALR(1) men det er den ikke.
Jeg ved det er en del at gå igennem men måske kan i skimte en fejl i fremgangsmåden selv om jeg er ret sikker på den passer ;)
grammar står for oven i en simplificeret udgave.. det er "dangling else problemet"
S'--> S
S --> I
S --> other
I --> if S
I --> if S else S
State 1
S' --> .S, $
S --> .I, $
S --> .other, $
I --> .if S, $
I --> .if S else S, $
State 2 (from 1, on S)
S' --> S.,$
State 3 (from 1, on I) (from 10, on I)
S --> I., $
State 4 (from 1, on other) (from 10, on other)
S --> other., $
State 5 (from 1, on if) (from 10, on if)
I --> if. S, $
I --> if. S else S, $
S --> .I, $
S --> .other, $
S --> .I, else
S --> .other, else
I --> .if S, $
I --> .if S else S, $
I --> .if S, else
I --> .if S else S, else
State 6 (from 5, on S)
I --> if S.,$
I --> if S. else S, $
State 7 (from 5, on I) (from 9, on I)(from 15, on I)
S --> I.,$
S --> I., else
State 8 (from 5, on other) (from 9, on other)(from 15, on other)
S --> other., $
S --> other., else
State 9 (from 5, on if)(from 15, on if) (self-loop on if)
I --> if. S, $
I --> if. S else S, $
I --> if. S, else
I --> if. S else S, else
S --> .I, $
S --> .other, $
S --> .I, else
S --> .other, else
I --> .if S, $
I --> .if S else S, $
I --> .if S, else
I --> .if S else S, else
State 10 (from 6, on else)
I --> if S else.S, $
S --> .I, $
S --> .other, $
I --> .if S, $
I --> .if S else S, $
State 11 (from 9, on S)
I --> if S., $
I --> if S. else S, $
I --> if S., else
I --> if S. else S, else
State 13 (from 10, on S)
I --> if S else S., $
State 15 (from 11, on else)
I --> if S else.S, $
I --> if S else.S, else
S --> .I, $
S --> .other, $
S --> .I, else
S --> .other, else
I --> .if S, $
I --> .if S else S, $
I --> .if S, else
I --> .if S else S, else
State 16 (from 15, on S)
I --> if S else S., $
I --> if S else S., else
