CIT 594 Grammar corrections
Spring 2004, David Matuszek

This page just collects in one place the changes to the BNF grammar between assignment 3 (Recognizer) and assignment 4 (Parser).

<variable> ::= <name>     // was: <variable> ::= ":" <name>

<name> ::= <letter> { <letter> | <digit> }

<integer> ::= <digit> { <digit> }

<program> ::= <command> { <command> } { <procedure> }     // new nonterminal

<command> ::= <move> <expression> <eol>
            | "penup" <eol>
            | "pendown" <eol>
            | "color" <colorname> <eol>
            | "home" <eol>
            | "set" <variable> <expression> <eol>
            | "repeat" <expression> <block>
            | "while" <condition> <block>
            | "if" <condition> <block>
            | "do" <name> { <expression> } <eol>     // new alternative

<move> ::= "forward"    // no longer allows "backward"
         | "right"
         | "left"

<colorname> ::= "red" | "orange" | "yellow" | "green" | "blue"
              | "purple" | "violet" | "brown" | "black" | "white"
              | "gray" | "pink"

<block> ::= "[" <eol> { <command> } "]" <eol>

<condition> ::= <expression> <comparator> <expression>

<comparator> ::= "<" | "=" | ">"

<procedure> ::= "to" <name> { <variable> } <eol> { <command> } "end" <eol>

<eol> ::= "\n" { "\n" }     // was: <eol> ::= "\n" 
<expression> ::= <term> { <add_operator> <term> } 
          // was: <expression> ::= <term>
          //                                 | <term> <add_operator> <expression>

<term> ::= <factor> { <multiply_operator> <factor> }
          // was: <term> ::= <factor>
          //                       | <factor> <multiply_operator> <term>

<factor> ::= <name>
               | <number>
               | "(" <expression> ")"

<add_operator> ::= "+" | "-"

<multiply_operator> ::= "*" | "/"