// Copyright Hans Åberg.

digraph "calc++ grammar"
{
  node [fontname = courier, shape = box, colorscheme = paired6]
  edge [fontname = courier]

//    0 [label="$accept: unit \"end of file\""]

    "unit" [shape=doubleoctagon]

    "unit" -> r1
    r1 [shape=record, label="<1>assignments|<2>exp"]
    r1:1 -> "assignments" [style=dotted]
    r1:2 -> "exp" [style=dotted]

    "assignments" -> r2 [arrowhead=tee label="%empty"]
    r2 [style=invis]

    "assignments" -> r3
    r3 [shape=record, label="<1>assignments|<2>assignment"]
    r3:1 -> "assignments" [style=dotted]
    r3:2 -> "assignment" [style=dotted]

    "assignment" -> r4
    r4 [shape=record, label="<1>identifier|<2>:=|<3>exp"]
    r4:1 -> "identifier" [style=dotted]
    r4:2 -> ":=" [style=dotted]
    r4:3 -> "exp" [style=dotted]

    "exp" -> "number"

    "exp" -> "identifier"

    "exp" -> r7
    r7 [shape=record, label="<1>exp|<2>+|<3>exp"]
    r7:1 -> "exp" [style=dotted]
    r7:2 -> "+" [style=dotted]
    r7:3 -> "exp" [style=dotted]

    "exp" -> r8
    r8 [shape=record, label="<1>exp|<2>-|<3>exp"]
    r8:1 -> "exp" [style=dotted]
    r8:2 -> "-" [style=dotted]
    r8:3 -> "exp" [style=dotted]

    "exp" -> r9
    r9 [shape=record, label="<1>exp|<2>*|<3>exp"]
    r9:1 -> "exp" [style=dotted]
    r9:2 -> "*" [style=dotted]
    r9:3 -> "exp" [style=dotted]

    "exp" -> r10
    r10 [shape=record, label="<1>exp|<2>/|<3>exp"]
    r10:1 -> "exp" [style=dotted]
    r10:2 -> "/" [style=dotted]
    r10:3 -> "exp" [style=dotted]

    "exp" -> r11
    r11 [shape=record, label="<1>(|<2>exp|<3>)"]
    r11:1 -> "(" [style=dotted]
    r11:2 -> "exp" [style=dotted]
    r11:3 -> ")" [style=dotted]
}
