Пример #1
0
        public TreeNode BuildParseTree()
        {
            TreeNode parseTree = new TreeNode();

            foreach (IToken token in InAList)
            {
                switch (token.Type)
                {
                case TokenType.keyword:
                    if (!parseTree.AppendKeyword(token.TokenString))
                    {
                        return(null);
                    }
                    break;

                case TokenType.number:
                    parseTree.AppendNumber((NumberToken)token);
                    break;

                case TokenType.infixOperator:
                    parseTree.AppendFunction(token);
                    break;

                case TokenType.suffixOperator:
                    parseTree.AppendFunction(token);
                    break;

                case TokenType.variable:
                    if (!parseTree.AppendVariable(token.TokenString.ToUpper()))
                    {
                        return(null);
                    }
                    break;

                case TokenType.function:
                    parseTree.AppendFunction((FunctionToken)token);
                    break;

                default:
                    ErrorLog.Add(new ErrorMessage("Fatal parsing error: this token type is unknown cannot be appended to the parse tree"));
                    return(null);
                }
            }
            if (parseTree.children.Count() > 0)
            {
                //The root node is always redundant by construction
                return(parseTree.children.First());
            }
            else
            {
                return(null);
            }
        }
Пример #2
0
		public TreeNode BuildParseTree() {
			TreeNode parseTree = new TreeNode();
			foreach (IToken token in InAList) {
				switch (token.Type) {
					case TokenType.keyword:
						if (!parseTree.AppendKeyword(token.TokenString))
							return null;
						break;
					case TokenType.number:
						parseTree.AppendNumber((NumberToken)token);
						break;
					case TokenType.infixOperator:
						parseTree.AppendFunction(token);
						break;
					case TokenType.suffixOperator:
						parseTree.AppendFunction(token);
						break;
					case TokenType.variable:
						if (!parseTree.AppendVariable(token.TokenString.ToUpper())) {
							return null;
						}
						break;
					case TokenType.function:
						parseTree.AppendFunction((FunctionToken)token);
						break;
					default:
						ErrorLog.Add(new ErrorMessage("Fatal parsing error: this token type is unknown cannot be appended to the parse tree"));
						return null;
				}
			}
			if (parseTree.children.Count() > 0)
				//The root node is always redundant by construction
				return parseTree.children.First();
			else return null;
		}