//------------------------------------------------------------------------------
// <autogenerated>
//     This code was generated by a tool.
//     Runtime Version: 1.0.3705.288
//
//     Changes to this file may cause incorrect behavior and will be lost if 
//     the code is regenerated.
// </autogenerated>
//------------------------------------------------------------------------------

// 
// This source code was auto-generated by xsd, Version=1.0.3705.288.
// 
namespace BC.Core.ASTs {
    using System.Xml.Serialization;
    
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlRootAttribute("Root", Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd", IsNullable=false)]
    public class Elements : AbstractNode {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Element")]
        public AbstractElement[] Element;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CommentElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractSemanticElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TypeDefinition))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractLinkableElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MethodDefinition))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Declaration))]
    public class AbstractElement : AbstractNode {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Elements))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumerationItem))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ContinueStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BreakStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(GotoStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CommentStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DeclarationStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractExpressionStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ReturnStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractCombinationStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractLoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ForStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IfStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SwitchStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LabeledStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ExpressionStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CompoundStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CommentElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractSemanticElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TypeDefinition))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractLinkableElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MethodDefinition))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Declaration))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractDesignator))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FieldDesignator))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IndexDesignator))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractInitializer))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(InitializerList))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Initializer))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CompositeExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FunctionExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ArrayExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FieldExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SizeOfTypeExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SizeOfExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CastExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TrinaryExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractOperatorExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(UnaryExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BinaryExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractConstantExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StringConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CharacterConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RealConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IntegerConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(NamedExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(VarArgType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumerationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CompositeType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(NamedType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractCompoundType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FunctionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ArrayType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IndirectType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractPrimitiveType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractRealType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ComplexType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ImaginaryType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RealType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IntegerType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BoolType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(VoidType))]
    public abstract class AbstractNode {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Annotation")]
        public System.Xml.XmlElement[] Annotation;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public int uid;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool uidSpecified;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public int refuid;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlIgnoreAttribute()]
        public bool refuidSpecified;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class EnumerationItem : AbstractNode {
        
        /// <remarks/>
        public string Name;
        
        /// <remarks/>
        public AbstractExpression Value;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CompositeExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FunctionExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ArrayExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FieldExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SizeOfTypeExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SizeOfExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CastExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TrinaryExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractOperatorExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(UnaryExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BinaryExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractConstantExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StringConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CharacterConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RealConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IntegerConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(NamedExpression))]
    public abstract class AbstractExpression : AbstractNode {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class CompositeExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractType Type;
        
        /// <remarks/>
        public InitializerList Operand;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(VarArgType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(EnumerationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CompositeType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(NamedType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractCompoundType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FunctionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ArrayType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IndirectType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractPrimitiveType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractRealType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ComplexType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ImaginaryType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RealType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IntegerType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BoolType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(VoidType))]
    public abstract class AbstractType : AbstractNode {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Constant = false;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Volatile = false;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Restricted = false;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class VarArgType : AbstractType {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class EnumerationType : AbstractType {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Item")]
        public EnumerationItem[] Item;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Name;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class CompositeType : AbstractType {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Field")]
        public Declaration[] Field;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Union = false;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Name;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class Declaration : AbstractLinkableElement {
        
        /// <remarks/>
        public AbstractInitializer Value;
        
        /// <remarks/>
        public Storage Storage;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(InitializerList))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Initializer))]
    public class AbstractInitializer : AbstractNode {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Designator")]
        public AbstractDesignator[] Designator;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FieldDesignator))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IndexDesignator))]
    public class AbstractDesignator : AbstractNode {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class FieldDesignator : AbstractDesignator {
        
        /// <remarks/>
        public string Field;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class IndexDesignator : AbstractDesignator {
        
        /// <remarks/>
        public AbstractExpression Index;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class InitializerList : AbstractInitializer {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Initializer")]
        public AbstractInitializer[] Initializer;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class Initializer : AbstractInitializer {
        
        /// <remarks/>
        public AbstractExpression Expression;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public enum Storage {
        
        /// <remarks/>
        Automatic,
        
        /// <remarks/>
        Register,
        
        /// <remarks/>
        Static,
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MethodDefinition))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Declaration))]
    public class AbstractLinkableElement : AbstractSemanticElement {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(Linkage.None)]
        public Linkage Linkage = Linkage.None;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public enum Linkage {
        
        /// <remarks/>
        None,
        
        /// <remarks/>
        Internal,
        
        /// <remarks/>
        External,
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TypeDefinition))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractLinkableElement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(MethodDefinition))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(Declaration))]
    public class AbstractSemanticElement : AbstractElement {
        
        /// <remarks/>
        public AbstractType Type;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Name;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class TypeDefinition : AbstractSemanticElement {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class MethodDefinition : AbstractLinkableElement {
        
        /// <remarks/>
        public CompoundStatement Body;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class CompoundStatement : AbstractStatement {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Statement")]
        public AbstractStatement[] Statement;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ContinueStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BreakStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(GotoStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CommentStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(DeclarationStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractExpressionStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ReturnStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractCombinationStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractLoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ForStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IfStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SwitchStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LabeledStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ExpressionStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CompoundStatement))]
    public abstract class AbstractStatement : AbstractNode {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ContinueStatement : AbstractStatement {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class BreakStatement : AbstractStatement {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class GotoStatement : AbstractStatement {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Target;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class CommentStatement : AbstractStatement {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Content;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class DeclarationStatement : AbstractStatement {
        
        /// <remarks/>
        public Declaration Declaration;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ReturnStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractCombinationStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractLoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ForStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IfStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SwitchStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LabeledStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ExpressionStatement))]
    public class AbstractExpressionStatement : AbstractStatement {
        
        /// <remarks/>
        public AbstractExpression Expression;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ReturnStatement : AbstractExpressionStatement {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractLoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ForStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LoopStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IfStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(SwitchStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LabeledStatement))]
    public class AbstractCombinationStatement : AbstractExpressionStatement {
        
        /// <remarks/>
        public AbstractStatement Statement;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ForStatement))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(LoopStatement))]
    public class AbstractLoopStatement : AbstractCombinationStatement {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool PostCheck = false;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ForStatement : AbstractLoopStatement {
        
        /// <remarks/>
        public AbstractExpression Init;
        
        /// <remarks/>
        public AbstractExpression Update;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class LoopStatement : AbstractLoopStatement {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class IfStatement : AbstractCombinationStatement {
        
        /// <remarks/>
        public AbstractStatement ElseStatement;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class SwitchStatement : AbstractCombinationStatement {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class LabeledStatement : AbstractCombinationStatement {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Label;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Case = false;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ExpressionStatement : AbstractExpressionStatement {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class NamedType : AbstractType {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Name;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(NameTypes.TypeDefinition)]
        public NameTypes Type = NameTypes.TypeDefinition;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public enum NameTypes {
        
        /// <remarks/>
        TypeDefinition,
        
        /// <remarks/>
        Structure,
        
        /// <remarks/>
        Union,
        
        /// <remarks/>
        Enumeration,
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(FunctionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ArrayType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IndirectType))]
    public abstract class AbstractCompoundType : AbstractType {
        
        /// <remarks/>
        public AbstractType Base;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class FunctionType : AbstractCompoundType {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Argument")]
        public Declaration[] Argument;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ArrayType : AbstractCompoundType {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Dimension")]
        public AbstractExpression[] Dimension;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Static = false;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class IndirectType : AbstractCompoundType {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Reference = false;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractRealType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ComplexType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ImaginaryType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RealType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IntegerType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BoolType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(VoidType))]
    public class AbstractPrimitiveType : AbstractType {
        
        /// <remarks/>
        public AbstractExpression PrecisionExpression;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(32)]
        public int Precision = 32;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ComplexType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ImaginaryType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RealType))]
    public class AbstractRealType : AbstractPrimitiveType {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ComplexType : AbstractRealType {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ImaginaryType : AbstractRealType {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class RealType : AbstractRealType {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class IntegerType : AbstractPrimitiveType {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(true)]
        public bool Signed = true;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class BoolType : AbstractPrimitiveType {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class VoidType : AbstractPrimitiveType {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class FunctionExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractExpression Operand;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Argument")]
        public AbstractExpression[] Argument;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class ArrayExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractExpression Operand;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("Index")]
        public AbstractExpression[] Index;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class FieldExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractExpression Operand;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Field;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class SizeOfTypeExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractType Operand;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class SizeOfExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractExpression Operand;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class CastExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractExpression Operand;
        
        /// <remarks/>
        public AbstractType Type;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class TrinaryExpression : AbstractExpression {
        
        /// <remarks/>
        public AbstractExpression Condition;
        
        /// <remarks/>
        public AbstractExpression TrueResult;
        
        /// <remarks/>
        public AbstractExpression FalseResult;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(UnaryExpression))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(BinaryExpression))]
    public class AbstractOperatorExpression : AbstractExpression {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public Operator Operator;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public enum Operator {
        
        /// <remarks/>
        Add,
        
        /// <remarks/>
        Subtract,
        
        /// <remarks/>
        Multiply,
        
        /// <remarks/>
        Divide,
        
        /// <remarks/>
        Modulo,
        
        /// <remarks/>
        ShiftLeft,
        
        /// <remarks/>
        ShiftRight,
        
        /// <remarks/>
        Less,
        
        /// <remarks/>
        Greater,
        
        /// <remarks/>
        LessOrEqual,
        
        /// <remarks/>
        GreaterOrEqual,
        
        /// <remarks/>
        Equal,
        
        /// <remarks/>
        NotEqual,
        
        /// <remarks/>
        LogicalAnd,
        
        /// <remarks/>
        LogicalOr,
        
        /// <remarks/>
        LogicalNot,
        
        /// <remarks/>
        BitwiseAnd,
        
        /// <remarks/>
        BitwiseOr,
        
        /// <remarks/>
        BitwiseNot,
        
        /// <remarks/>
        XOr,
        
        /// <remarks/>
        PreIncrement,
        
        /// <remarks/>
        PreDecrement,
        
        /// <remarks/>
        PostIncrement,
        
        /// <remarks/>
        PostDecrement,
        
        /// <remarks/>
        UnaryPlus,
        
        /// <remarks/>
        UnaryMinus,
        
        /// <remarks/>
        Address,
        
        /// <remarks/>
        Dereference,
        
        /// <remarks/>
        Assign,
        
        /// <remarks/>
        AddAssign,
        
        /// <remarks/>
        SubtractAssign,
        
        /// <remarks/>
        MultiplyAssign,
        
        /// <remarks/>
        DivideAssign,
        
        /// <remarks/>
        ModuloAssign,
        
        /// <remarks/>
        ShiftLeftAssign,
        
        /// <remarks/>
        ShiftRightAssign,
        
        /// <remarks/>
        BitwiseAndAssign,
        
        /// <remarks/>
        BitwiseOrAssign,
        
        /// <remarks/>
        XOrAssign,
        
        /// <remarks/>
        Coma,
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class UnaryExpression : AbstractOperatorExpression {
        
        /// <remarks/>
        public AbstractExpression Operand;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class BinaryExpression : AbstractOperatorExpression {
        
        /// <remarks/>
        public AbstractExpression LeftOperand;
        
        /// <remarks/>
        public AbstractExpression RightOperand;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(StringConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(CharacterConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(RealConstant))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(IntegerConstant))]
    public class AbstractConstantExpression : AbstractExpression {
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class StringConstant : AbstractConstantExpression {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Value;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Unicode = false;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class CharacterConstant : AbstractConstantExpression {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Value;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(false)]
        public bool Unicode = false;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class RealConstant : AbstractConstantExpression {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public System.Double Value;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(64)]
        public int Precision = 64;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class IntegerConstant : AbstractConstantExpression {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute(DataType="integer")]
        public string Value;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(true)]
        public bool Signed = true;
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        [System.ComponentModel.DefaultValueAttribute(32)]
        public int Precision = 32;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class NamedExpression : AbstractExpression {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Name;
    }
    
    /// <remarks/>
    [System.Xml.Serialization.XmlTypeAttribute(Namespace="http://bernoulli.cs.cornell.edu/ASTs.xsd")]
    public class CommentElement : AbstractElement {
        
        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string Content;
    }
}
