// BNF of PL/0 by Descartes language

<program>	<block> "." ;
<block>		[ "const" <ident> "=" <number> {"," <ident> "=" <number>} ";"]
		[ "var" <ident> {"," <ident>} ";"]
		{ "procedure" <ident> ";" <block> ";" } 
		<statement> ;
<statement>	[ <ident> ":=" <expression> | "call" <ident> |
		 "begin" <statement> {";" <statement> } "end" |
		 "if" <condition> "then" <statement> |
		 "while" <condition> "do" <statement> |
		 "print" [(<ident #id> | <number #s #n> | <strings #str>)
		    { ","  (<ident #id2> | <number #s2 #n2>| <strings #str2>)}]];
<condition>	"odd" <expression> |
		<expression> ("="|"#"|"<"|"<="|">"|">=") <expression> ;
<expression>	[ "+"|"-"] <term> { ("+"|"-") <term>};
<term>		<factor> {("*"|"/") <factor>};
<factor>	<ident> | <number> | "(" <expression> ")";

<ident>		<ID>;
<number>	<NUM>;
<strings>	<STRINGS>;

