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

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

Сначала:

• Решите задачу №6 -- составьте ФБН для поддержки переменных в выражении
• Создаем в своем репозитории новую ветку для реализации задачи со скобками - ответвляемся от созданной, для решения предыдущей задачи.
• Выполнить реализацию, опираясь на составленную ФБН

Далее требования к реализации:

1. Добавить хранилище переменных - в JS для этого можно использовать объект (link is external)
2. При обработке операции присваивания записывайте значение переменной в хранилище
3. Добавляем тесты по мере решения задачи (и до и в процессе решения ;)
4. Сообщать об ошибке (указав строку и номер символа в строке, в которой наблюдается проблема), если в выражении есть неинициализированная переменная (если подзабыл что такое "инициализация" - см. сюда ;))

Написал ФБН

<Digit> ::= [0-9]
<UnsignedInteger> ::= "0" | ([1-9] <Digit>*)
<Variable> ::= [a-z]+
<Multiplier> ::= <UnsignedInteger> | <UnaryMinus> | "(" <Expression> ")" | <Variable>
<UnaryMinus> ::= "-" <Multiplier> 
<Multiplication> ::= ( <Multiplier> | <Multiplication> | <Division> ) "*" <Multiplier> 
<Division> ::= ( <Multiplier> | <Multiplication> | <Division> ) "/" <Multiplier> 
<Term> ::= <Multiplier> | <Multiplication> | <Division> | <UnaryMinus>
<Addition> ::= ( <Term> | <Addition> | <Subtraction> ) "+" <Term>
<Subtraction> ::= ( <Term> | <Addition> | <Subtraction> ) "-" <Term>
<Expression> ::= <Variable> "=" <Expression> | (<Term> | <Addition> | <Subtraction>)