private dynamic Factor()

in src/extensions/template_extension/ExpressionCalculator.cs [465:535]


        private dynamic Factor()
        {
            dynamic value;
            if (_tokenType == TokenType.Number)
            {
                value = double.Parse(_token);
                NextToken();
            }
            else if (_tokenType == TokenType.String)
            {
                value = _token;
                NextToken();
            }
            else if (_tokenType == TokenType.Bool)
            {
                value = bool.Parse(_token);
                NextToken();
            }
            else if (_tokenType == TokenType.Identifier)
            {
                Function? function;
                Constant? constant;
                Variable? variable;
                if ((function = FunctionFromString(_token)) != null)
                {
                    NextToken();
                    value = function.Delegate();
                    if (value is double)
                    {
                        value = Exact(value);
                    }
                }
                else if ((constant = ConstantFromString(_token)) != null)
                {
                    NextToken();
                    value = constant.Value;
                    if (value is double)
                    {
                        value = Exact(value);
                    }
                }
                else if ((variable = VariableFromString(_token)) != null)
                {
                    NextToken();
                    value = variable.Value;
                    if (value is double)
                    {
                        value = Exact(value);
                    }
                }
                else
                {
                    throw new CalcException("Undefined symbol", _position);
                }
            }
            else if (_tokenType == TokenType.OpenParen)
            {
                NextToken();
                value = Expression();
                if (_tokenType != TokenType.CloseParen)
                {
                    throw new CalcException("Expected close parenthesis", _position);
                }
                NextToken();
            }
            else
            {
                throw new CalcException("Expected number, function, or constant", _position);
            }
            return value;
        }