digraph lexer { rankdir=LR; node [shape = doublecircle] LP RP B0 BF DP1 DD0 DD1 DD2 DR0 DR1 INF NAN EXD; node [shape = circle]; BEGIN -> LP [ label = "(" ]; BEGIN -> RP [ label = ")" ]; BEGIN -> H [ label = "#" ]; subgraph bools { H -> B0 [ label = "t,f" ]; B0 -> BF [ label = "rue,alse" ]; } /* subgraph chars { H -> SL [ label = "\\" ]; SL -> CH1 [ label = "*" ]; SL -> NMCH [ label = "alarm" ]; SL -> NMCH [ label = "backspace" ]; SL -> NMCH [ label = "delete" ]; SL -> NMCH [ label = "escape" ]; SL -> NMCH [ label = "newline" ]; SL -> NMCH [ label = "null" ]; SL -> NMCH [ label = "return" ]; SL -> NMCH [ label = "space" ]; SL -> NMCH [ label = "tab" ]; SL -> XC [ label = "x" ]; } */ subgraph numbers { BEGIN -> DD0 [ label = "0-9" ]; BEGIN -> SN0 [ label = "+,-" ]; BEGIN -> DP0 [ label = "." ]; DD0 -> DD0 [ label = "0-9" ]; DD0 -> DP1 [ label = "." ]; DP1 -> DD1 [ label = "0-9" ]; DP0 -> DD1 [ label = "0-9" ]; DD1 -> DD1 [ label = "0-9" ]; SN0 -> DD0 [ label = "0-9" ]; SN0 -> DP0 [ label = "." ]; SN0 -> INF [ label = "inf.0" ]; SN0 -> NAN [ label = "nan.0" ]; H -> NEX [ label = "i,e" ]; NEX -> DD0 [ label = "0-9" ]; NEX -> SN0 [ label = "+,-" ]; NEX -> NXH1 [ label = "#" ]; NXH1 -> NXD1 [ label = "d" ]; NXD1 -> DD0 [ label = "0-9" ]; NXD1 -> SN0 [ label = "+,-" ]; NXH1 -> NXX1 [ label = "b,o,x" ]; NXX1 -> SN1 [ label = "+,-" ]; NXX1 -> DR0 [ label = "Dr" ]; H -> NBD [ label = "d" ]; NBD -> DD0 [ label = "0-9" ]; NBD -> SN0 [ label = "+,-" ]; NBD -> NBH [ label = "#" ]; NBH -> NBX [ label = "i,e" ]; NBX -> SN0 [ label = "+,-" ]; NBX -> DD0 [ label = "0-9" ]; H -> NBS [ label = "b,o,x" ]; NBS -> DR0 [ label = "Dr" ]; DR0 -> DR0 [ label = "Dr" ]; NBS -> NXH [ label = "#" ]; NXH -> NXX [ label = "i,e" ]; NXX -> DR0 [ label = "Dr" ]; NBS -> SN1 [ label = "+,-" ]; NXX -> SN1 [ label = "+,-" ]; SN1 -> DR0 [ label = "Dr" ]; SN1 -> INF [ label = "inf.0" ]; SN1 -> NAN [ label = "nan.0" ]; DD0 -> EXP [ label = "e" ]; DP1 -> EXP [ label = "e" ]; DD1 -> EXP [ label = "e" ]; EXP -> EXS [ label = "+,-" ]; EXS -> EXD [ label = "0-9" ]; EXP -> EXD [ label = "0-9" ]; EXD -> EXD [ label = "0-9" ]; DR0 -> FR0 [ label = "/" ]; FR0 -> DR1 [ label = "Dr" ]; DR1 -> DR1 [ label = "Dr" ]; DD0 -> FR1 [ label = "/" ]; FR1 -> DD2 [ label = "0-9" ]; DD2 -> DD2 [ label = "0-9" ]; } }