public int Count()
 {
     if (Expression == "")
     {
         var ex = new Exception();
         ex.Data.Add("Type", "reference to empty cell");
         throw ex;
     }
     if (IsReevaluated)
     {
         return((int)Value);
     }
     try
     {
         var inputStream       = new AntlrInputStream(Expression);
         var lexer             = new GrammarLexer(inputStream);
         var commonTokenStream = new CommonTokenStream(lexer);
         var parser            = new GrammarParser(commonTokenStream);
         parser.RemoveErrorListeners();
         parser.AddErrorListener(new ParsingErrorListener());
         var expr = parser.rule();
         int val  = (new ParsingVisitor(this)).Visit(expr);
         IsReevaluated = true;
         return(val);
     }
     catch
     {
         throw;
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Prepare the parser
        /// </summary>
        private static void PrepareParser()
        {
            CommonTokenStream tokenStream = new CommonTokenStream(lexer);

            parser = new GrammarParser(tokenStream);
            parser.RemoveErrorListeners();
            parser.AddErrorListener(new GrammarErrorListener(handler));
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            StreamReader pom = new System.IO.StreamReader("../../../sourceCode.txt");

            AntlrInputStream inputStream = new AntlrInputStream(pom);
            GrammarLexer     lexer       = new GrammarLexer(inputStream);

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(new GrammarErrorListener());
            CommonTokenStream c           = new CommonTokenStream(lexer);
            GrammarParser     helloParser = new GrammarParser(c);

            //IParseTree tree = helloParser.start();
            // ParseTreeWalker walker = new ParseTreeWalker();
            //walker.Walk(new TreeWalkerListener(), tree);
            helloParser.RemoveErrorListeners();
            helloParser.AddErrorListener(new GrammarErrorListener());


            Console.WriteLine("START");

            try
            {
                IParseTree tree = helloParser.start();
                Console.WriteLine("----------------Lexical analyzation OK----------------------");

                Visitor visitor = new Visitor();
                visitor.DoInitialJmp(1);
                int t = visitor.Visit(tree);
                visitor.numberInstructions();

                Console.WriteLine(visitor.GetSymbolTable().VarConstToString());
                Console.WriteLine("-----------------------------------------");
                PrintInstructions(visitor.GetInstructions());
                WriteInstructions(visitor.GetInstructions());
            }
            catch (ArgumentException e)
            {
                Console.WriteLine(e.Message);
            }



            Console.ReadLine();
            // skvelej napad, jednopruchod znamena dolu i nahoru, takze dolu udelam jen neco a smerem nahoru zbytek
        }
Esempio n. 4
0
        public void TestGrammarError(String path, ErrorCode expectedError)
        {
            StreamReader pom = new System.IO.StreamReader(path);

            ErrorHandler handler = new ErrorHandler();


            AntlrInputStream inputStream = new AntlrInputStream(pom);
            GrammarLexer     lexer       = new GrammarLexer(inputStream);

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(new GrammarErrorListener(handler));
            CommonTokenStream c           = new CommonTokenStream(lexer);
            GrammarParser     helloParser = new GrammarParser(c);

            helloParser.RemoveErrorListeners();
            helloParser.AddErrorListener(new GrammarErrorListener(handler));

            try
            {
                IParseTree tree = helloParser.start();
                pom.Close();

                if (handler.errorsOccured())
                {
                    List <Error> grammarErrors = handler.GrammarErrors;

                    Assert.AreEqual(1, grammarErrors.Count, "More errors occured than expected");
                    Assert.AreEqual(ErrorCode.grammarError, grammarErrors[0].ErrorCode, "Invalid error type.");
                }
                else
                {
                    Assert.Fail("No grammar error occured");
                }
            }
            catch (ArgumentException e)
            {
                Console.WriteLine(e.Message);
            }
        }
Esempio n. 5
0
 void CalculateCellExpression(ElectronicTableCell cell)
 {
     try
     {
         var inputStream       = new AntlrInputStream(cell.Expression);
         var lexer             = new GrammarLexer(inputStream);
         var commonTokenStream = new CommonTokenStream(lexer);
         var parser            = new GrammarParser(commonTokenStream);
         parser.RemoveErrorListeners();
         parser.AddErrorListener(new ParsingErrorListener());
         var expr = parser.rule();
         cell.Value = (new ParsingVisitor(cell)).Visit(expr);
     }
     catch
     {
         throw;
     }
     cell.IsReevaluated = true;
     foreach (var dep in cell.Depended)
     {
         CalculateCellExpression(dep);
     }
 }
Esempio n. 6
0
        public void TestOutputFromFile(String path, String output)
        {
            StreamReader pom = new System.IO.StreamReader(path);

            ErrorHandler handler = new ErrorHandler();


            AntlrInputStream inputStream = new AntlrInputStream(pom);
            GrammarLexer     lexer       = new GrammarLexer(inputStream);

            lexer.RemoveErrorListeners();
            lexer.AddErrorListener(new GrammarErrorListener(handler));
            CommonTokenStream c           = new CommonTokenStream(lexer);
            GrammarParser     helloParser = new GrammarParser(c);

            helloParser.RemoveErrorListeners();
            helloParser.AddErrorListener(new GrammarErrorListener(handler));

            String path_file_ins = "insc1.txt";

            try
            {
                IParseTree tree = helloParser.start();
                pom.Close();

                if (handler.errorsOccured())
                {
                    Assert.Fail("Errors detected during lexical or syntactic analysis.");
                }

                Visitor visitor = new Visitor(handler);
                visitor.PrepareLibraryFunctions();
                visitor.DoInitialJmp();
                int t = visitor.Visit(tree);

                if (handler.errorsOccured())
                {
                    Assert.Fail("Errors detected during semantic analysis.");
                }

                visitor.numberInstructions();

                Program.WriteInstructions(visitor.GetInstructions(), path_file_ins);
            }
            catch (ArgumentException e)
            {
                Console.WriteLine(e.Message);
            }

            Process interpreter = new Process();

            interpreter.StartInfo.FileName               = "../../../refint_pl0_ext.exe";
            interpreter.StartInfo.Arguments              = path_file_ins + " -s -l";
            interpreter.StartInfo.UseShellExecute        = false;
            interpreter.StartInfo.RedirectStandardOutput = true;

            interpreter.Start();

            StreamReader reader = new StreamReader(interpreter.StandardOutput.BaseStream);

            if (!interpreter.WaitForExit(15000))
            {
                Assert.IsFalse(true, "Process might got stuck in infinite loop");
                interpreter.Kill();
            }


            String output_from_interpret = reader.ReadToEnd();

            Assert.AreEqual("START PL/0\r\n" + output + " END PL/0\r\n", output_from_interpret);
        }