##"I made a program to generate dot files representing the LR(0) state graph along with computed LALR(1) lookahead for an arbitrary context-free grammar, to make the diagrams I used in this article: http://blog.lab49.com/archives/2471. The program also highlights errant nodes in red if the grammar would produce a shift/reduce or reduce/reduce conflict -- you may be able to go to http://kthielen.dnsalias.com:8082/ to produce a graph more to your liking". Contributed by Kalani Thielen. ##Command to get the layout: "dot -Gsize=10,15 -Tpng thisfile > thisfile.png" digraph g { graph [fontsize=30 labelloc="t" label="" splines=true overlap=false rankdir = "LR"]; ratio = auto; "state0" [ style = "filled, bold" penwidth = 5 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #0
(0) s -> •e $
(1) e -> •l '=' r
(2) e -> •r
(3) l -> •'*' r
(4) l -> •'n'
(5) r -> •l

> ]; "state1" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #1
(3) l -> •'*' r
(3) l -> '*' •r
(4) l -> •'n'
(5) r -> •l

> ]; "state2" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #2
(4) l -> 'n' • | =$

> ]; "state3" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #3
(5) r -> l • | =$

> ]; "state4" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #4
(3) l -> '*' r • | =$

> ]; "state5" [ style = "filled" penwidth = 1 fillcolor = "black" fontname = "Courier New" shape = "Mrecord" label =<

State #5
(0) s -> e •$

> ]; "state6" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #6
(1) e -> l •'=' r
(5) r -> l • | $

> ]; "state7" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #7
(1) e -> l '=' •r
(3) l -> •'*' r
(4) l -> •'n'
(5) r -> •l

> ]; "state8" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #8
(1) e -> l '=' r • | $

> ]; "state9" [ style = "filled" penwidth = 1 fillcolor = "white" fontname = "Courier New" shape = "Mrecord" label =<

State #9
(2) e -> r • | $

    > ];
      state0 -> state5 [ penwidth = 5 fontsize = 28 fontcolor = "black" label = "e" ];
      state0 -> state6 [ penwidth = 5 fontsize = 28 fontcolor = "black" label = "l" ];
      state0 -> state9 [ penwidth = 5 fontsize = 28 fontcolor = "black" label = "r" ];
      state0 -> state1 [ penwidth = 1 fontsize = 14 fontcolor = "grey28" label = "'*'" ];
      state0 -> state2 [ penwidth = 1 fontsize = 14 fontcolor = "grey28" label = "'n'" ];
      state1 -> state1 [ penwidth = 1 fontsize = 14 fontcolor = "grey28" label = "'*'" ];
      state1 -> state4 [ penwidth = 5 fontsize = 28 fontcolor = "black" label = "r" ];
      state1 -> state2 [ penwidth = 1 fontsize = 14 fontcolor = "grey28" label = "'n'" ];
      state1 -> state3 [ penwidth = 5 fontsize = 28 fontcolor = "black" label = "l" ];
      state6 -> state7 [ penwidth = 1 fontsize = 14 fontcolor = "grey28" label = "'='" ];
      state7 -> state8 [ penwidth = 5 fontsize = 28 fontcolor = "black" label = "r" ];
      state7 -> state1 [ penwidth = 1 fontsize = 14 fontcolor = "grey28" label = "'*'" ];
      state7 -> state2 [ penwidth = 1 fontsize = 14 fontcolor = "grey28" label = "'n'" ];
      state7 -> state3 [ penwidth = 5 fontsize = 28 fontcolor = "black" label = "l" ];
    }