We want to extend the operational semantics of expressions to include environments and assignments, according to the following abstract syntax:
P ::= L
L ::= S ';' L1 | S
S ::= I ':=' E
E ::= E1 '+' E2 | E1 '–' E2 | E1 '*' E2 | '(' E1 ')' | N
N ::= N1 D | D
D ::= '0' | '1' | … | '9'
I ::= I1 A | A
A ::= 'a' | 'b' | … | 'z'
To do this we must include the effect of assignments on the storage of the abstract machine.
The storage is an environment that is a function from identifiers to integer values (including the undefined value):