Ejemplo n.º 1
0
        private static void InitializeTypes(SymbolTableStack symtabstack)
        {
            // int
            IntegerId = symtabstack.CreateInLocal("integer");
            IntegerType = TypeSpec.CreateType(TypeForm.Scalar);
            IntegerType.Identifier = IntegerId;
            IntegerId.Definition = Definition.TYPE;
            IntegerId.Type = IntegerType;

            // real
            RealId = symtabstack.CreateInLocal("real");
            RealType = TypeSpec.CreateType(TypeForm.Scalar);
            RealType.Identifier = RealId;
            RealId.Definition = Definition.TYPE;
            RealId.Type = RealType;

            // boolean
            BooleanId = symtabstack.CreateInLocal("boolean");
            BooleanType = TypeSpec.CreateType(TypeForm.Enumeration);
            BooleanType.Identifier = BooleanId;
            BooleanId.Definition = Definition.TYPE;
            BooleanId.Type = BooleanType;

            // char
            CharId = symtabstack.CreateInLocal("char");
            CharType = TypeSpec.CreateType(TypeForm.Scalar);
            CharType.Identifier = CharId;
            CharId.Definition = Definition.TYPE;
            CharId.Type = CharType;

            //
            UndefinedType = TypeSpec.CreateType(TypeForm.Scalar);
        }
Ejemplo n.º 2
0
        public override void Process(ICode iCode, SymbolTableStack symtabstack)
        {
            var start = DateTime.Now;
            //
            var end = DateTime.Now;
            double elapsed_time = (end - start).Ticks / (1.0 * TimeSpan.TicksPerSecond);
            int instruction_count = 0;

            // send the message
            var args = Tuple.Create(instruction_count, elapsed_time);
            Message msg = new Message(MessageType.CompilerSummary, args);
            Send(msg);
        }
Ejemplo n.º 3
0
        public override void Process(ICode iCode, SymbolTableStack symtabstack)
        {
            int execution_count = 0;
            var start = DateTime.Now;

            ICodeNode root = iCode.Root;
            StatementInterpreter stmnt_interpreter = StatementInterpreter.CreateWithObservers(observers);
            var execution_results = stmnt_interpreter.Execute(root, ref execution_count);

            var end = DateTime.Now;
            double elapsed_time = (end - start).Ticks / (1.0 * TimeSpan.TicksPerSecond);
            int runtime_errors = RuntimeErrorHandler.Errors;

            // send the message
            var args = Tuple.Create(execution_count, runtime_errors, elapsed_time);
            Message msg = new Message(MessageType.InterpreterSummary, args);
            Send(msg);
        }
Ejemplo n.º 4
0
        private static void InitializeConstants(SymbolTableStack symtabstack)
        {
            // boolean enum constant false
            FalseId = symtabstack.CreateInLocal("false");
            FalseId.Definition = Definition.ENUMERATION_CONSTANT;
            FalseId.Type = BooleanType;
            FalseId.SetAttribute(SymbolTableKey.ConstantValue, 0);

            // boolean enum constant true
            TrueId = symtabstack.CreateInLocal("true");
            TrueId.Definition = Definition.ENUMERATION_CONSTANT;
            TrueId.Type = BooleanType;
            TrueId.SetAttribute(SymbolTableKey.ConstantValue, 1);

            // add false & true to the boolean enumeration type
            var constants = new List<SymbolTableEntry>() { FalseId, TrueId };
            BooleanType.SetAttribute(TypeKey.EnumerationConstants, constants);
        }
Ejemplo n.º 5
0
 public static AssignmentStatementParser CreateWithObservers(Scanner s, SymbolTableStack stack, List<IMessageObserver> obl)
 {
     return NonTerminalParser.CreateWithObserver<AssignmentStatementParser>(s, stack, obl);
 }
Ejemplo n.º 6
0
 public abstract void Process(ICode iCode, SymbolTableStack symtabstack);
Ejemplo n.º 7
0
 public static ExpressionParser CreateWithObservers(Scanner s, SymbolTableStack stack, List<IMessageObserver> obl)
 {
     return NonTerminalParser.CreateWithObserver<ExpressionParser>(s, stack, obl);
 }
Ejemplo n.º 8
0
 /**
  * Initialize a symbol table stack with predefined identifiers.
  *
  */
 public static void Initialize(SymbolTableStack symtabstack)
 {
     InitializeTypes(symtabstack);
     InitializeConstants(symtabstack);
 }
Ejemplo n.º 9
0
 public static void Print(SymbolTableStack stack)
 {
     Console.WriteLine("\n===== CROSS-REFERENCE TABLE =====");
     PrintColumnHeadings();
     PrintSymbolTable(stack.GetLocal());
 }