Simple alternatives can be specified using the vertical bar (tt(|)). Each
alternative should begin with a unique identifying terminal token. The
terminal token may actually be hidden in a nonterminal rule, in which case
that nonterminal can be used as an alias for the nonterminal. In fact
identical terminal tokens may be used if at some point the terminal tokens
differ over different alternatives. Here are some examples:
        verb(
    // Example 1:  plain terminal distinguishing tokens
    expr:
        ID        
    |
        NUMBER
    ;

    // Example 2:  nested terminal distinguishing tokens
    expr:
        id
    |
        number
    ;

    id:
        ID
    ;

    number:
        NUMBER
    ;

    // Example 3:  eventually diverting routes
    expr:
        ID
        id
    |
        ID
        number
    ;

    id:
        ID
    ;

    number:
        NUMBER
    ;
        )
