internal static FdoExpression ParseNode(ParseTreeNode child)
        {
            if (child.Term.Name == FdoTerminalNames.Expression)
            {
                return(ParseNode(child.ChildNodes[0]));
            }
            else
            {
                switch (child.Term.Name)
                {
                case FdoTerminalNames.UnaryExpression:
                    return(new FdoUnaryExpression(child));

                case FdoTerminalNames.BinaryExpression:
                    return(new FdoBinaryExpression(child));

                case FdoTerminalNames.Function:
                    return(new FdoFunction(child));

                case FdoTerminalNames.Identifier:
                    return(new FdoIdentifier(child));

                case FdoTerminalNames.ValueExpression:
                    return(FdoValueExpression.ParseValueNode(child));

                default:
                    throw new FdoParseException("Unknown terminal: " + child.Term.Name);
                }
            }
        }
 private void ProcessNodeList(ParseTreeNodeList list)
 {
     foreach (ParseTreeNode child in list)
     {
         if (child.Term.Name == FdoTerminalNames.ValueExpressionCollection)
         {
             ProcessNodeList(child.ChildNodes);
         }
         else
         {
             this.ValueList.Add(FdoValueExpression.ParseValueNode(child));
         }
     }
 }