/// <summary> /// Overloaded Parse function to parse a Function /// </summary> /// <param name="walker">Lexer input</param> /// <returns></returns> public IParseNode Parse(TokenWalker walker) { var lexem = walker.Pop(); if (lexem.Token is IdentifierToken) { FunctionNode function = new FunctionNode(lexem); // Pop opening parenthesis function.OpenParenthesis = walker.Consume <OpenParenthesisToken>(); function.Parameters.Add(_expressionParser.Parse(walker)); while (walker.NextIs <CommaToken>()) { walker.Consume <CommaToken>(); function.Parameters.Add(_expressionParser.Parse(walker)); } function.ClosedParenthesis = walker.Consume <ClosedParenthesisToken>(); return(function); } throw new ArgumentNullException(); }
/// <summary> /// Overloaded Parse function to parse a Factor /// </summary> /// <param name="walker">Lexer input</param> /// <returns></returns> public IParseNode Parse(TokenWalker walker) { if (walker.NextIs <NumberToken>()) { return(CreateNumberNode(walker)); } if (walker.NextIs <IdentifierToken>()) { return(walker.NextIs <OpenParenthesisToken>(1) ? _functionParser.Parse(walker) : _variableParser.Parse(walker)); } walker.ExpectOpeningParenthesis(); var result = _expressionParser.Parse(walker); walker.ExpectClosingParenthesis(); return(result); }