
 *** BNF of Enhanced PL/0 ***

program = block  .
block = [ "const" ident "=" number {"," ident "=" number} ";"]
        [ "var" ident {"," ident} ";"]
        { "function" ident "(" [ident {"," ident}] ")" ";" block } 
	statement .
statement = [ ident "=" expression | 
	     ident "(" [expression {"," expression}] ")" ";"
	    "return" expression ";" |
            "begin" { statement } "end" |
            "if" condition "then" statement ["else" statement] |
            "while" condition "do" statement|
	    "for" ident "=" expression ";" condition ";" 
			ident = expression "do" statement |
	    "print" [(ident | number | strings)
	           { ","  (ident | number | strings)}] ";"].
condition = "odd" expression |
            expression ("="|"#"|"<"|"<="|">"|">=") expression .
expression = [ "+"|"-"] term { ("+"|"-") term}.
term = factor {("*"|"/") factor}.
factor = ident "(" [expression {"," expression }] ")" |
	 ident | number | "(" expression ")".


