## Struktur von Program
Programme sind hierarchisch aus Komponenten aufgebaut. Für jede  
Komponente geben wir Regeln an, wie sie aus anderen  
Komponenten zusammengesetzt sein können.

	 program = decl* stmt*
	 decl = type name ( , name)*
	 type = int

#### Statements
	stmt ::= ; | { stmt* } |  
	name = expr; | name = read(); | write( expr ); |  
	if ( cond ) stmt |  
	if ( cond ) stmt else stmt |  
	while ( cond ) stmt
- Ein Statement ist entweder leer (d.h. gleich ;) oder eine  
geklammerte Folge von Statements;  
-  Oder eine Zuweisung, eine Lese- oder Schreib-Operation;  
-  Eine (einseitige oder zweiseitige) bedingte Verzweigung;  
 - Oder eine Schleife.
#### Expressions
	expr ::= number | name | ( expr ) |  
	unop expr | expr binop expr 
	unop ::= -  
	binop ::= - | + | * | / | %
- Ein Ausdruck ist eine Konstante, eine Variable oder ein geklammerter Ausdruck  
-  Oder ein unärer Operator (unop), angewandt auf einen Ausdruck,  
-  Oder ein binärer Operator(binop), angewandt auf zwei Argument-Ausdrücke.  
-  Einziger unärer Operator ist (bisher) die Negation.  
- Mögliche binäre Operatoren sind Addition, Subtraktion,  Multiplikation, (ganz-zahlige) Division und Modulo.