Program:=(Decl|Function)* Function:= Type Name (DeclNoInit? (, DeclNoInit)*) CodeBlock Type:= Type "*" | byte | Type? (Type*(,Type*)) Name:= Alpha AlphaNum* DeclNoInit:= Type Name CodeBlock = { Statement* } Statement = WhileLoop | ForLoop | If | IfElse | Decl | ExpressionStatement WhileLoop = while(Expression) :