Пример #1
0
 /// <summary>
 /// Constructor of MoveStatement
 /// </summary>
 /// <param name="leftExpression">Expression of the left part of Move instruccion</param>
 /// <param name="rightExpression">Expression of the right part of Move instruccion</param>
 /// <param name="fileName">File name.</param>
 /// <param name="line">Line number.</param>
 public MoveStatement(SingleIdentifierExpression leftExpression, SingleIdentifierExpression rightExpression, string fileName, int line)
     : base(new Location(fileName, line, 0))
 {
     this.leftExp       = leftExpression;
     this.rightExp      = rightExpression;
     this.moveStatement = null;
 }
Пример #2
0
 /// <summary>
 /// Constructor of TypeDefinition.
 /// </summary>
 /// <param name="id">Name of the type.</param>
 /// <param name="mods">List of modifier identifiers.</param>
 /// <param name="bases">List of base class identifiers.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 protected TypeDefinition(SingleIdentifierExpression id, List <Modifier> mods, List <string> bases, List <Declaration> decls, Location location)
     : base(id, id.Identifier, location)
 {
     this.modifiers = mods;
     this.baseClass = bases;
     this.members   = decls;
 }
Пример #3
0
 /// <summary>
 /// Constructor of ForeachStatement
 /// </summary>
 /// <param name="type">WriteType of Foreach loop.</param>
 /// <param name="id">Name of Foreach loop.</param>
 /// <param name="expr">Expression of Foreach loop.</param>
 /// <param name="stats">Block executed in the Foreach loop.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public ForeachStatement(string type, SingleIdentifierExpression id, Expression expr, Statement stats, Location location)
     : base(location)
 {
     this.decl       = new IdDeclaration(id, type, location);
     this.expression = expr;
     this.block      = stats;
 }
 /// <summary>
 /// Constructor of QualifiedIdentifierExpression
 /// </summary>
 /// <param name="exp">Expression to compose the name.</param>
 /// <param name="fieldName">First name.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public QualifiedIdentifierExpression(SingleIdentifierExpression name, IdentifierExpression exp, Location location)
     : base(location)
 {
     this.expression = exp;
     this.idName     = name;
     this.Identifier = name.Identifier + "." + exp.Identifier;
 }
Пример #5
0
 /// <summary>
 /// Constructor of ThetaStatement
 /// </summary>
 /// <param name="id">Function identifier.</param>
 /// <param name="list">Represents a union of expression.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="line">Line number.</param>
 public ThetaStatement(SingleIdentifierExpression id, List <SingleIdentifierExpression> list, Location location)
     : base(location)
 {
     this.thetaId   = id;
     this.thetaList = new List <SingleIdentifierExpression>();
     if (list.Count != 0)
     {
         insertElements(list);
     }
 }
Пример #6
0
 /// <summary>
 /// Constructor of MethodDefinition.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="stats">Body associated to the method definition.</param>
 /// <param name="returnType">Name of the return type.</param>
 /// <param name="parameters">Parameters information.</param>
 /// <param name="modifiers">Modifiers information.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public MethodDefinition(SingleIdentifierExpression id, Block stats, string returnType, List <Parameter> parameters, List <Modifier> modifiers, Location location)
     : base(id, returnType, parameters, modifiers, location)
 {
     this.body = stats;
     if (modifiers.Contains(Modifier.Static) && id.Identifier.Equals("Main"))
     {
         Program.SetEntryPointFound(this.Location);
         this.isEntryPoint = true;
     }
 }
Пример #7
0
 /// <summary>
 /// Constructor of MethodDeclaration.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="parameters">Parameters information.</param>
 /// <param name="modifiers">Modifiers information.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public MethodDeclaration(SingleIdentifierExpression id, string returnType, List <Parameter> parameters, List <Modifier> modifiers, Location location)
     : base(id, null, location)
 {
     this.parametersInfo = parameters;
     if (parameters == null)
     {
         this.parametersInfo = new List <Parameter>();
     }
     this.modifiersInfo  = modifiers;
     this.returnTypeInfo = returnType;
 }
Пример #8
0
        /// <summary>
        /// Constructor of ClassDefinition.
        /// </summary>
        /// <param name="id">Name of the class.</param>
        /// <param name="mods">List of modifier identifiers.</param>
        /// <param name="bases">List of base class identifiers.</param>
        /// <param name="fileName">File name.</param>
        /// <param name="lineNumber">Line number.</param>
        /// <param name="columnNumber">Column number.</param>
        public ClassDefinition(SingleIdentifierExpression id, List <Modifier> mods, List <string> bases, List <Declaration> decls, Location location)
            : base(id, mods, bases, decls, location)
        {
            bool constructorFound = false;

            if (mods.Contains(Modifier.Static)) // Static class needs static constructor
            {
                // Check default constructor.
                for (int i = 0; i < decls.Count; i++)
                {
                    if (decls[i] is MethodDeclaration)
                    {
                        if ((((MethodDeclaration)decls[i]).Identifier.Equals(id.Identifier)) && (((MethodDeclaration)decls[i]).ModifiersInfo.Contains(Modifier.Static)))
                        {
                            constructorFound = true;
                            break;
                        }
                    }
                }
            }
            else   // Non static class needs non static constructor
            {
                // Check default constructor.
                for (int i = 0; i < decls.Count; i++)
                {
                    if (decls[i] is MethodDeclaration)
                    {
                        if (((MethodDeclaration)decls[i]).Identifier.Equals(id.Identifier)) // && (!(((MethodDeclaration)decls[i]).ModifiersInfo.Contains(Modifier.Static))))
                        {
                            constructorFound = true;
                            break;
                        }
                    }
                }
            }

            if (!constructorFound)
            {
                List <Modifier> m = new List <Modifier>();
                if (mods.Contains(Modifier.Static))
                {
                    m.Add(Modifier.Static);
                }
                else
                {
                    m.Add(Modifier.Public);
                }
                this.members.Add(new ConstructorDefinition(id, m, new List <Parameter>(), null, new Block(location), location));
            }
        }
        public override bool Equals(object obj)
        {
            if (this.GetHashCode() != obj.GetHashCode())
            {
                return(false);
            }
            SingleIdentifierExpression singleId = obj as SingleIdentifierExpression;

            if (singleId == null)
            {
                return(false);
            }
            return(this.Identifier.Equals(singleId.Identifier) && this.indexOfSSA == singleId.indexOfSSA);
        }
Пример #10
0
 /// <summary>
 /// Constructor of FieldAccessExpression
 /// </summary>
 /// <param name="exp">Expression to access a field.</param>
 /// <param name="fieldName">Field name.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public FieldAccessExpression(Expression exp, SingleIdentifierExpression fieldName, Location location)
     : base(location)
 {
     this.expression = exp;
     this.field      = fieldName;
 }
 /// <summary>
 /// Constructor of ConstantFieldDefinition.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="type">TypeExpression of the definition.</param>
 /// <param name="init">Initialization of the definition.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public ConstantFieldDefinition(SingleIdentifierExpression id, string type, Expression init, List <Modifier> mods, Location location)
     : base(id, init, type, mods, location)
 {
 }
Пример #12
0
 /// <summary>
 /// Constructor of Definition
 /// </summary>
 /// <param name="id">Name of the declaration.</param>
 /// <param name="type">TypeExpression of the declaration.</param>
 /// <param name="init">Initialization of the definition.</param>
 /// <param name="indexSSA">Number associated to the declaration for SSA algorithm</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public Definition(SingleIdentifierExpression id, string type, Expression init, int indexSSA, Location location)
     : base(id, indexSSA, type, location)
 {
     this.initialization = init;
 }
 /// <summary>
 /// Constructor of ConstructorDefinition.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="stats">Body associated to the method definition.</param>
 /// <param name="parameters">Parameters information.</param>
 /// <param name="modifiers">Modifiers information.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public ConstructorDefinition(SingleIdentifierExpression id, List <Modifier> modifiers, List <Parameter> parameters, InvocationExpression init, Block stats, Location location)
     : base(id, stats, null, parameters, modifiers, location)
 {
     this.initialization = init;
 }
Пример #14
0
 /// <summary>
 /// Constructor of Definition.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="type">TypeExpression of the definition.</param>
 /// <param name="get">Statements associated to get accessor.</param>
 /// <param name="set">Statements associated to set accessor.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public PropertyDefinition(SingleIdentifierExpression id, string type, Statement get, Statement set, Location location)
     : base(id, type, location)
 {
     this.getBlock = get;
     this.setBlock = set;
 }
Пример #15
0
 /// <summary>
 /// Constructor of FieldDefinition.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="init">Field Initialization.</param>
 /// <param name="type">Name of the field type.</param>
 /// <param name="modifiers">Modifiers information.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public FieldDefinition(SingleIdentifierExpression id, Expression init, string type, List <Modifier> modifiers, Location location)
     : base(id, type, modifiers, location)
 {
     this.initialization = init;
 }
Пример #16
0
 /// <summary>
 /// Constructor of ConstantDefinition.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="type">TypeExpression of the definition.</param>
 /// <param name="init">Initialization of the definition.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public ConstantDefinition(SingleIdentifierExpression id, string type, Expression init, Location location)
     : base(id, type, init, location)
 {
 }
Пример #17
0
 /// <summary>
 /// Constructor of ClassDefinition.
 /// </summary>
 /// <param name="id">Name of the class.</param>
 /// <param name="mods">List of modifier identifiers.</param>
 /// <param name="bases">List of base class identifiers.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public InterfaceDefinition(SingleIdentifierExpression id, List <Modifier> mods, List <string> bases, List <Declaration> decls, ErrorManagement.Location location)
     : base(id, mods, bases, decls, location)
 {
 }
Пример #18
0
 /// <summary>
 /// Updates the value of the element stored in the specified index.
 /// </summary>
 /// <param name="index">Index.</param>
 public void SetExpressionElement(int index, SingleIdentifierExpression exp)
 {
     this.expressions[index] = exp;
 }
Пример #19
0
 /// <summary>
 /// Constructor of FieldDeclaration.
 /// </summary>
 /// <param name="id">Name of the definition.</param>
 /// <param name="type">Name of its type.</param>
 /// <param name="modifiers">Modifiers information.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public FieldDeclaration(SingleIdentifierExpression id, string type, List <Modifier> modifiers, Location location)
     : base(id, -1, null, location)
 {
     this.modifiersInfo = modifiers;
     this.fieldType     = type;
 }
Пример #20
0
 /// <summary>
 /// Constructor of IdDeclaration
 /// </summary>
 /// <param name="id">Name of the declaration.</param>
 /// <param name="type">TypeExpression of the declaration.</param>
 /// <param name="fileName">File name.</param>
 /// <param name="lineNumber">Line number.</param>
 /// <param name="columnNumber">Column number.</param>
 public IdDeclaration(SingleIdentifierExpression id, string type, Location location)
     : base(type, location)
 {
     this.identifier            = id;
     this.identifier.IndexOfSSA = 0;
 }