Задача 3: Поддержка переменных, организация их хранения

Решение задачи 3

<Digit> ::= [0-9]
<UnsignedInteger> ::= "0" | ([1-9] <Digit>*)
<Multiplier> ::= <UnsignedInteger>  | <UnarMinus> | <Parenthesis> | <Word>
<Multiplication> ::= ( <Multiplier> | <Multiplication> | <Division> ) "*" <Multiplier> 
<Division> ::= ( <Multiplier> | <Multiplication> | <Division>  ) "/" <Multiplier>  
<Term> ::= <Multiplier> | <Multiplication> | <Division> 
<Addition> ::= ( <Term> | <Addition> | <Subtraction> ) "+" <Term>
<Subtraction> ::= ( <Term> | <Addition> | <Subtraction>  ) "-" <Term>
<Expression> ::= <Term> | <Addition> | <Subtraction> | <Prisvaivanie> 
<UnarMinus> ::= "-"  <Multiplier>
<Parenthesis> ::= "(" <Expression> ")"
<Word> ::= [a-zA-Z]+
<Prisvaivanie> ::= <Word> "=" <Expression>

Моё решение здесь