Esempio n. 1
0
        public MMMLInterpreter(string filename)
        {
            var sr     = new StreamReader(filename);
            var ais    = new AntlrInputStream(sr.ReadToEnd());
            var lexer  = new MMMLLexer(ais);
            var cts    = new CommonTokenStream(lexer);
            var parser = new MMMLParser(cts);
            var prog   = parser.program();

            //var visitor = new MMMLTreeVisitor();
            //Console.WriteLine("Olha Soh! {0}", visitor.Visit(prog));
            if (parser.nerrors > 0)
            {
                Console.WriteLine("\nCompilation Failed ({0} errors)", parser.nerrors);
                return;
            }

            foreach (SymbolEntry <FunctionEntry> entry in parser.functionTable)
            {
                var plist =
                    from p in entry.symbol.plist
                    select p.name + ": " + p.type.ToString();

                var plist_str = String.Join(", ", plist);

                Console.WriteLine("Function {0}: ({1}) -> {2}",
                                  entry.symbol.name,
                                  plist_str,
                                  entry.symbol.retType);
            }

            //foreach (var entry in parser.functionTable.st)
            Console.WriteLine("The program from {0} is {1}", filename, prog.ToStringTree(parser));
        }
Esempio n. 2
0
        public Expressao()
        {
            try
            {
                string caminhoApp = AppDomain.CurrentDomain.BaseDirectory;
                caminhoApp = caminhoApp.Substring(0, caminhoApp.IndexOf("bin") - 1);
                string arquivo = Path.Combine(caminhoApp, "entrada.txt");

                StreamReader file = new StreamReader(arquivo);
                lexer = new MMMLLexer(new AntlrInputStream(file));
                CommonTokenStream tokens = new CommonTokenStream(lexer);
                parser = new MMMLParser(tokens);

                var res = parser.funcbody();

                string msgRetorno = string.Empty;

                if (parser.qtdErro > 0)
                {
                    msgRetorno = "Expressão inválida";
                }
                else
                {
                    Stack <object> pilhaSimbolo = parser.PilhaSimbolo;
                    if (pilhaSimbolo != null && pilhaSimbolo.Count >= 1)
                    {
                        object resultado = pilhaSimbolo.Pop();
                        msgRetorno = string.Format("Resultado final: {0} (type {1})", resultado, res.oType.Name);
                    }
                }

                if (!string.IsNullOrEmpty(msgRetorno))
                {
                    Console.WriteLine(msgRetorno);
                    Console.WriteLine("-------------------------------");
                }

                file.Close();
            }
            catch (Exception ex)
            {
                Console.WriteLine("Erro: " + ex);
                return;
            }
        }