Пример #1
0
 public void AddVariable(Variable var)
 {
     _variables.Add(var.Name, var);
 }
Пример #2
0
        /// <summary>
        /// <para> Production E: </para> 
        /// <para> E -> N = VE' </para> 
        /// </summary>
        /// <exception cref="CalculatorException">On syntax error</exception>
        private void E()
        {
            if ( !SkipSpacesAndContinue() )
            {
                return;
            }
            if (!Char.IsLetter(_initialInput[_index]))
            {
                throw new CalculatorException("Was expecting a letter.", _index);
            }
            // E -> N = VE'
            var name = N();
            if (name == null ||
                name == Variable.E.Name ||
                name == Variable.PI.Name ||
                name == Variable.ANS.Name )
            {
                throw new CalculatorException("Variable name is reserved for constant value.", _index);
            }
            if (name == Calculate.Root ||
                name == Calculate.Log ||
                name == Command ||
                name == Calculate.Command ||
                name == Help.Command ||
                name == Fraction.Command)
            {
                throw new CalculatorException("Variable name is reserved for existing operation.", _index);
            }

            if ( !SkipSpacesAndContinue() )
            {
                return;
            }

            if (_initialInput[_index] != '=')
            {
                throw new CalculatorException("Was expecting '='.", _index);
            }
            _index++;

            var value = V();
            var oldVariable = Variable.GetVariable(name);

            if (oldVariable != null)
            {
                oldVariable.Value = value;
                _variablesToSet.Add(oldVariable);
            }
            else
            {
                var newVariable = new Variable(name, value);
                _variablesToSet.Add(newVariable);
                Variable.Variables.Add(newVariable);
            }

            E_();
        }