private void ParseFuncCall(ParseNode parent) { ParseNode item = parent.CreateNode(this.scanner.GetToken(OpenExcel.Common.FormulaParser.TokenType.FuncCall), "FuncCall"); parent.Nodes.Add(item); Token token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.FUNC }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.FUNC) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.FUNC.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } ParseNode node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENOPEN }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENOPEN) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENOPEN.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NULL, OpenExcel.Common.FormulaParser.TokenType.BOOL, OpenExcel.Common.FormulaParser.TokenType.NUMBER, OpenExcel.Common.FormulaParser.TokenType.STRING, OpenExcel.Common.FormulaParser.TokenType.PARENOPEN, OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN, OpenExcel.Common.FormulaParser.TokenType.SHEETNAME, OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR, OpenExcel.Common.FormulaParser.TokenType.FUNC, OpenExcel.Common.FormulaParser.TokenType.COMMA }); if ((((token.Type == OpenExcel.Common.FormulaParser.TokenType.NULL) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.BOOL)) || ((token.Type == OpenExcel.Common.FormulaParser.TokenType.NUMBER) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.STRING))) || ((((token.Type == OpenExcel.Common.FormulaParser.TokenType.PARENOPEN) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN)) || ((token.Type == OpenExcel.Common.FormulaParser.TokenType.SHEETNAME) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.ADDRESS))) || (((token.Type == OpenExcel.Common.FormulaParser.TokenType.ERR) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.FUNC)) || (token.Type == OpenExcel.Common.FormulaParser.TokenType.COMMA)))) { this.ParseParams(item); } token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); parent.Token.UpdateRange(item.Token); }
private void ParseStart(ParseNode parent) { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Start), "Start"); parent.Nodes.Add(node); ParseComplexExpr(node); tok = scanner.Scan(TokenType.EOF); if (tok.Type != TokenType.EOF) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.EOF.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); parent.Token.UpdateRange(node.Token); }
private void ParseRange(ParseNode parent) { Token token; ParseNode node; ParseNode item = parent.CreateNode(this.scanner.GetToken(OpenExcel.Common.FormulaParser.TokenType.Range), "Range"); parent.Nodes.Add(item); if (this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.SHEETNAME }).Type == OpenExcel.Common.FormulaParser.TokenType.SHEETNAME) { token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.SHEETNAME }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.SHEETNAME) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.SHEETNAME.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); } token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR }); switch (token.Type) { case OpenExcel.Common.FormulaParser.TokenType.ERR: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ERR }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ERR) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ERR.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); break; case OpenExcel.Common.FormulaParser.TokenType.ADDRESS: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ADDRESS) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ADDRESS.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); break; default: this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found.", 2, 0, token.StartPos, token.StartPos, token.Length)); break; } if (this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.COLON }).Type == OpenExcel.Common.FormulaParser.TokenType.COLON) { token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.COLON }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.COLON) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.COLON.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR }); switch (token.Type) { case OpenExcel.Common.FormulaParser.TokenType.ERR: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ERR }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ERR) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ERR.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); goto Label_059B; case OpenExcel.Common.FormulaParser.TokenType.ADDRESS: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.ADDRESS }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.ADDRESS) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.ADDRESS.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); goto Label_059B; } this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found.", 2, 0, token.StartPos, token.StartPos, token.Length)); } Label_059B: parent.Token.UpdateRange(item.Token); }
private void ParseExpr(ParseNode parent) { ParseNode node; ParseNode item = parent.CreateNode(this.scanner.GetToken(OpenExcel.Common.FormulaParser.TokenType.Expr), "Expr"); parent.Nodes.Add(item); Token token = this.scanner.LookAhead(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NULL, OpenExcel.Common.FormulaParser.TokenType.BOOL, OpenExcel.Common.FormulaParser.TokenType.NUMBER, OpenExcel.Common.FormulaParser.TokenType.STRING, OpenExcel.Common.FormulaParser.TokenType.PARENOPEN, OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN, OpenExcel.Common.FormulaParser.TokenType.SHEETNAME, OpenExcel.Common.FormulaParser.TokenType.ADDRESS, OpenExcel.Common.FormulaParser.TokenType.ERR, OpenExcel.Common.FormulaParser.TokenType.FUNC }); switch (token.Type) { case OpenExcel.Common.FormulaParser.TokenType.PARENOPEN: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENOPEN }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENOPEN) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENOPEN.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); this.ParseExpr(item); token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.PARENCLOSE.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); break; case OpenExcel.Common.FormulaParser.TokenType.BRACEOPEN: this.ParseArray(item); break; case OpenExcel.Common.FormulaParser.TokenType.FUNC: this.ParseFuncCall(item); break; case OpenExcel.Common.FormulaParser.TokenType.ERR: case OpenExcel.Common.FormulaParser.TokenType.SHEETNAME: case OpenExcel.Common.FormulaParser.TokenType.ADDRESS: this.ParseRange(item); break; case OpenExcel.Common.FormulaParser.TokenType.NULL: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NULL }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.NULL) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.NULL.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); break; case OpenExcel.Common.FormulaParser.TokenType.BOOL: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.BOOL }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.BOOL) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.BOOL.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); break; case OpenExcel.Common.FormulaParser.TokenType.NUMBER: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.NUMBER }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.NUMBER) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.NUMBER.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); break; case OpenExcel.Common.FormulaParser.TokenType.STRING: token = this.scanner.Scan(new OpenExcel.Common.FormulaParser.TokenType[] { OpenExcel.Common.FormulaParser.TokenType.STRING }); if (token.Type != OpenExcel.Common.FormulaParser.TokenType.STRING) { this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found. Expected " + OpenExcel.Common.FormulaParser.TokenType.STRING.ToString(), 0x1001, 0, token.StartPos, token.StartPos, token.Length)); } node = item.CreateNode(token, token.ToString()); item.Token.UpdateRange(token); item.Nodes.Add(node); break; default: this.tree.Errors.Add(new ParseError("Unexpected token '" + token.Text.Replace("\n", "") + "' found.", 2, 0, token.StartPos, token.StartPos, token.Length)); break; } parent.Token.UpdateRange(item.Token); }
private void ParseExpr(ParseNode parent) { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Expr), "Expr"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.NULL, TokenType.BOOL, TokenType.NUMBER, TokenType.STRING, TokenType.PARENOPEN, TokenType.BRACEOPEN, TokenType.SHEETNAME, TokenType.ADDRESS, TokenType.ERR, TokenType.FUNC); switch (tok.Type) { case TokenType.NULL: tok = scanner.Scan(TokenType.NULL); if (tok.Type != TokenType.NULL) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.NULL.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.BOOL: tok = scanner.Scan(TokenType.BOOL); if (tok.Type != TokenType.BOOL) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BOOL.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.NUMBER: tok = scanner.Scan(TokenType.NUMBER); if (tok.Type != TokenType.NUMBER) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.NUMBER.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.STRING: tok = scanner.Scan(TokenType.STRING); if (tok.Type != TokenType.STRING) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.STRING.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.PARENOPEN: tok = scanner.Scan(TokenType.PARENOPEN); if (tok.Type != TokenType.PARENOPEN) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.PARENOPEN.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); ParseExpr(node); tok = scanner.Scan(TokenType.PARENCLOSE); if (tok.Type != TokenType.PARENCLOSE) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.PARENCLOSE.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.BRACEOPEN: ParseArray(node); break; case TokenType.SHEETNAME: case TokenType.ADDRESS: case TokenType.ERR: ParseRange(node); break; case TokenType.FUNC: ParseFuncCall(node); break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length)); break; } parent.Token.UpdateRange(node.Token); }
private void ParseRange(ParseNode parent) { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Range), "Range"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.SHEETNAME); if (tok.Type == TokenType.SHEETNAME) { tok = scanner.Scan(TokenType.SHEETNAME); if (tok.Type != TokenType.SHEETNAME) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SHEETNAME.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); } tok = scanner.LookAhead(TokenType.ADDRESS, TokenType.ERR); switch (tok.Type) { case TokenType.ADDRESS: tok = scanner.Scan(TokenType.ADDRESS); if (tok.Type != TokenType.ADDRESS) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ADDRESS.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.ERR: tok = scanner.Scan(TokenType.ERR); if (tok.Type != TokenType.ERR) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ERR.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length)); break; } tok = scanner.LookAhead(TokenType.COLON); if (tok.Type == TokenType.COLON) { tok = scanner.Scan(TokenType.COLON); if (tok.Type != TokenType.COLON) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COLON.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); tok = scanner.LookAhead(TokenType.ADDRESS, TokenType.ERR); switch (tok.Type) { case TokenType.ADDRESS: tok = scanner.Scan(TokenType.ADDRESS); if (tok.Type != TokenType.ADDRESS) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ADDRESS.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.ERR: tok = scanner.Scan(TokenType.ERR); if (tok.Type != TokenType.ERR) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.ERR.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length)); break; } } parent.Token.UpdateRange(node.Token); }
private void ParseArrayElems(ParseNode parent) { Token tok; ParseNode n; ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.ArrayElems), "ArrayElems"); parent.Nodes.Add(node); tok = scanner.LookAhead(TokenType.NULL, TokenType.BOOL, TokenType.NUMBER, TokenType.STRING, TokenType.PARENOPEN, TokenType.BRACEOPEN, TokenType.SHEETNAME, TokenType.ADDRESS, TokenType.ERR, TokenType.FUNC); if (tok.Type == TokenType.NULL || tok.Type == TokenType.BOOL || tok.Type == TokenType.NUMBER || tok.Type == TokenType.STRING || tok.Type == TokenType.PARENOPEN || tok.Type == TokenType.BRACEOPEN || tok.Type == TokenType.SHEETNAME || tok.Type == TokenType.ADDRESS || tok.Type == TokenType.ERR || tok.Type == TokenType.FUNC) { ParseComplexExpr(node); } tok = scanner.LookAhead(TokenType.COMMA, TokenType.SEMICOLON); while (tok.Type == TokenType.COMMA || tok.Type == TokenType.SEMICOLON) { tok = scanner.LookAhead(TokenType.COMMA, TokenType.SEMICOLON); switch (tok.Type) { case TokenType.COMMA: tok = scanner.Scan(TokenType.COMMA); if (tok.Type != TokenType.COMMA) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COMMA.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; case TokenType.SEMICOLON: tok = scanner.Scan(TokenType.SEMICOLON); if (tok.Type != TokenType.SEMICOLON) { tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.SEMICOLON.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length)); } n = node.CreateNode(tok, tok.ToString()); node.Token.UpdateRange(tok); node.Nodes.Add(n); break; default: tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length)); break; } ParseComplexExpr(node); tok = scanner.LookAhead(TokenType.COMMA, TokenType.SEMICOLON); } parent.Token.UpdateRange(node.Token); }