Figure 1
<program> ::= <statement> <statement> ::= begin <stat list> end | if <exp> then <statement> else <statement> | while <exp> do <statement> | <ident>:=<exp> | output <exp> | <ident> | <dec> <dec> ::= var <id list> | proc <ident> = <statement> <id list> ::= <ident> | <ident>, <id list> <stat list> ::= <statement> | <statement>; <stat list> <exp> ::= <sexp> <relop> <sexp> | <sexp> <sexp> ::= <sexp> <addop> <term> | <term> <term> ::= <term> * <opd> | <opd> <opd> ::= ( <exp> ) | <ident> | <integer> <relop> ::= = | <> | < | <= | > | >= <addop> ::= + | -
-- Figure 1. Concrete Syntax --
I.e. The concrete syntax of the demonstration, imperative language being defined. Note that it includes procedure definition and call.