Simproc has only one simple type, integer, and one structured type, unidimensional array of integers with lower bound 1. A declaration introduces either an integer variable, an array variable with its size, or a procedure. A procedure declaration specifies its name, the names of its formal parameterformal parameters, and its body, which is a block. A given identifier can be declared only once in a given block. The identifiers denoting the formal parameters of a procedure are considered to be declared in the block which is its body.
Procedures are recursive.
Available statements are integer assignment, procedure call and a simplified conditional. The latter statement allows to test the equalityequality of two integer expressions and execute one of two never-empty statement lists according to the result of that comparison. Inside the body of the procedure, the first parameter behaves as a local variable initialized with the value of the actual parameter, whereas any reference to the second parameter is a reference to the actual one. All the operators have the same precedence and associate from left to right. Variables are either simple variables, array variables indexed by an integer expression, or formal parameters.