Ejemplo n.º 1
0
 public static void Main(string[] args)
 {
     if (args.Length > 0)
     {
         try
         {
             string inputFileName = args[0];
             if (!Path.IsPathRooted(inputFileName))
             {
                 inputFileName = Path.Combine(Environment.CurrentDirectory, inputFileName);
             }
             ICharStream input = new ANTLRFileStream(inputFileName);
             XML         lexer = new XML(input);
             while (lexer.NextToken() != Token.EOF_TOKEN)
             {
                 ;
             }
         }
         catch (Exception ex)
         {
             Console.Out.WriteLine("exception: " + ex);
             Console.Out.WriteLine(ex.StackTrace);
         }
     }
     else
     {
         Console.Error.WriteLine("Usage: xmlLexer <input-file>");
     }
 }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            ICharStream  stream = new ANTLRFileStream(args[0]);
            ZilFormatter zform  = new ZilFormatter();

            zform.Format(stream, Console.Out);
        }
Ejemplo n.º 3
0
        public static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                string inputFileName = args[0];
                if (!Path.IsPathRooted(inputFileName))
                {
                    inputFileName = Path.Combine(Environment.CurrentDirectory, inputFileName);
                }
                ICharStream       input  = new ANTLRFileStream(inputFileName);
                CLexer            lex    = new CLexer(input);
                CommonTokenStream tokens = new CommonTokenStream(lex);
                CParser           parser = new CParser(tokens);

                try {
                    parser.translation_unit();
                }
                catch (RecognitionException re) {
                    Console.Out.WriteLine(re.StackTrace);
                }
            }
            else
            {
                Console.Error.WriteLine("Usage: cparse <input-file>");
            }
        }
Ejemplo n.º 4
0
        public static void Main(string[] args)
        {
            if (args.Length == 1)
            {
                string fullpath;
                if (Path.IsPathRooted(args[0]))
                {
                    fullpath = args[0];
                }
                else
                {
                    fullpath = Path.Combine(Environment.CurrentDirectory, args[0]);
                }

                Console.Out.WriteLine("Processing file: {0}", fullpath);
                ICharStream       input  = new ANTLRFileStream(fullpath);
                LangLexer         lex    = new LangLexer(input);
                CommonTokenStream tokens = new CommonTokenStream(lex);
                LangParser        parser = new LangParser(tokens);

                //LangParser.decl_return r = parser.decl();
                LangParser.start_return r = parser.start();
                Console.Out.WriteLine("tree: " + ((ITree)r.Tree).ToStringTree());
                CommonTree           r0    = ((CommonTree)r.Tree);
                CommonTreeNodeStream nodes = new CommonTreeNodeStream(r0);
                nodes.TokenStream = tokens;
                LangDumpDecl walker = new LangDumpDecl(nodes);
                walker.decl();
            }
            else
            {
                Console.Error.WriteLine("Usage: TreeParser <input-file>");
            }
        }
Ejemplo n.º 5
0
        private static int Compile(string filename)
        {
            filename = Path.GetFullPath(filename);
            ICharStream  characters = new ANTLRFileStream(filename);
            var          lexer      = new TigerLexer(characters);
            ITokenStream tokens     = new CommonTokenStream(lexer);

            var parser = new TigerParser(tokens);


            //parser.TraceDestination = Console.Out;
            var result = parser.program();

            if (parser.NumberOfSyntaxErrors > 0 || lexer.Error)
            {
                return(1);
            }

            ((ProgramNode)result.Tree).CheckSemantics(Scope.DefaultGlobalScope, Scope.DefaultGlobalScope.Reporter);

            if (Scope.DefaultGlobalScope.Reporter.Errors.Count > 0)
            {
                Scope.DefaultGlobalScope.Reporter.PrintErrors(Console.Out);
                return(1);
            }

            var generator = new CodeGenerator(filename);

            generator.GenerateCode((ASTNode)result.Tree);
            generator.SaveBin();
            return(0);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Parses the file.
        /// </summary>
        public void Parse()
        {
            try
            {
                ANTLRFileStream inputStream = new ANTLRFileStream(FileName);

                CpsLexer          lexer  = new CpsLexer(inputStream);
                CommonTokenStream tokens = new CommonTokenStream(lexer);
                CpsParser         parser = new CpsParser(tokens);

                // Parse the file
                ITree ct = (ITree)parser.concern().Tree;

                if (ct != null)
                {
                    Walk(ct);
                }
            }
            catch (IOException ex)
            {
                throw new CpsParserException(String.Format(CultureInfo.CurrentCulture,
                                                           Resources.ConcernNotFound, FileName), FileName, ex);
            }
            catch (RecognitionException ex)
            {
                throw new CpsParserException(String.Format(CultureInfo.CurrentCulture,
                                                           Resources.UnableToParseConcern, FileName, ex.Message), FileName, ex);
            }
        }
Ejemplo n.º 7
0
        public static void Main(string[] args)
        {
            if (args.Length == 1)
            {
                string fullpath;
                if (Path.IsPathRooted(args[0]))
                {
                    fullpath = args[0];
                }
                else
                {
                    fullpath = Path.Combine(Environment.CurrentDirectory, args[0]);
                }

                Console.Out.WriteLine("Processing file: {0}", fullpath);
                ICharStream       input  = new ANTLRFileStream(fullpath);
                SimpleCLexer      lex    = new SimpleCLexer(input);
                CommonTokenStream tokens = new CommonTokenStream(lex);
                //System.out.println("tokens="+tokens);
                SimpleCParser parser = new SimpleCParser(tokens);
                parser.program();
                Console.Out.WriteLine("Finished processing file: {0}", fullpath);
            }
            else
            {
                Console.Error.WriteLine("Usage: llstar <input-filename>");
            }
        }
Ejemplo n.º 8
0
        public static List <Tuple <ITree, string, IToken[]> > ParseAcnInputFiles(IEnumerable <string> inputFiles)
        {
            var parsedInputFiles = new List <Tuple <ITree, string, IToken[]> >();

            foreach (var inFileName in inputFiles)
            {
                ICharStream       input  = new ANTLRFileStream(inFileName);
                acnLexer          lexer  = new acnLexer(input);
                CommonTokenStream tokens = new CommonTokenStream(lexer);

                List <IToken> tokenslst = new List <IToken>();
                foreach (IToken token in tokens.GetTokens())
                {
                    tokenslst.Add(token);
                }

                acnParser parser = new acnParser(tokens);
                acnParser.moduleDefinitions_return result = parser.moduleDefinitions();

                ITree tree = (CommonTree)result.Tree;
                CommonTreeNodeStream nodes = new CommonTreeNodeStream(tree);
                nodes.TokenStream = tokens;
                parsedInputFiles.Add(Tuple.Create(tree, inFileName, tokenslst.ToArray()));
            }

            return(parsedInputFiles);
        }
Ejemplo n.º 9
0
        private static ITree RunSyntaxAnalysys(string arg)
        {
            ICharStream       input  = new ANTLRFileStream(arg);
            MathLangLexer     lexer  = new MathLangLexer(input);
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            MathLangParser    parser = new MathLangParser(tokens);

            return((ITree)parser.execute().Tree);
        }
Ejemplo n.º 10
0
        public static bool Prefix(ANTLRFileStream __instance, string fileName, Encoding encoding)
        {
            var asDynamic = __instance.AsDynamic();

            asDynamic.data = _textProvider.GetText(fileName).WaitForResult().Text.ToCharArray();
            asDynamic.n    = asDynamic.data.Length;

            return(false);
        }
Ejemplo n.º 11
0
        public static FBXDocument Load(string FBXfilename)
        {
            ANTLRFileStream fStream = new ANTLRFileStream(FBXfilename, Encoding.ASCII);
            fbxLexer        lexer   = new fbxLexer(fStream);
            fbxParser       parser  = new fbxParser(new CommonTokenStream(lexer));

            FBXDocument doc = parser.document();

            doc.bindingManager = new FBXBindingManager(doc);
            return(doc);
        }
Ejemplo n.º 12
0
        public static void Main(string[] args)
        {
            // Use a try/catch block for parser exceptions
            try
            {
                string inputFileName;
                string templateFileName;

                if ((args.Length == 1) || (args.Length == 2))
                {
                    if (args.Length == 1)
                    {
                        templateFileName = "Java.stg";
                        inputFileName    = args[0];
                    }
                    else
                    {
                        templateFileName = args[0];
                        inputFileName    = args[1];
                    }

                    // Ensure full pathnames
                    if (!Path.IsPathRooted(templateFileName))
                    {
                        //templateFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, templateFileName);
                        templateFileName = Path.Combine(Environment.CurrentDirectory, templateFileName);
                    }
                    if (!Path.IsPathRooted(inputFileName))
                    {
                        inputFileName = Path.Combine(Environment.CurrentDirectory, inputFileName);
                    }

                    templates = new StringTemplateGroup(new StreamReader(templateFileName),
                                                        typeof(AngleBracketTemplateLexer));

                    ICharStream       input  = new ANTLRFileStream(inputFileName);
                    CMinusLexer       lexer  = new CMinusLexer(input);
                    CommonTokenStream tokens = new CommonTokenStream(lexer);
                    CMinusParser      parser = new CMinusParser(tokens);
                    parser.TemplateLib = templates;
                    RuleReturnScope r = parser.program();
                    Console.Out.WriteLine(r.Template.ToString());
                }
                else
                {
                    Console.Error.WriteLine("Usage: cminus [<output-template-file>] <input-file>");
                }
            }
            catch (System.Exception e)
            {
                Console.Error.WriteLine("exception: " + e);
                Console.Error.WriteLine(e.StackTrace);                 // so we can get stack trace
            }
        }
Ejemplo n.º 13
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public static void main(String[] args) throws Exception
        public static void Main(string[] args)
        {
            Thread.Sleep(10000);
            ANTLRFileStream   input  = new ANTLRFileStream(args[0]);
            JavaLexer         lexer  = new JavaLexer(input);
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            JavaParser        parser = new JavaParser(tokens);

            JavaParser.CompilationUnitContext tree = parser.compilationUnit();
            //		System.out.println(tree.toStringTree(parser));
            Thread.Sleep(10000);
        }
Ejemplo n.º 14
0
        public override void LoadScript(string path)
        {
            ANTLRFileStream fileStream = new ANTLRFileStream(path);

            try
            {
                InterpretAntlrStream(fileStream);
            }
            catch (PartialStatement e)
            {
                throw e.InnerException;
            }
        }
Ejemplo n.º 15
0
        private static void ApiGen(string protoFile, string shimTemplate)
        {
            ANTLRFileStream input = new ANTLRFileStream(protoFile);

            FuncProtoToShimLexer  lex    = new FuncProtoToShimLexer(input);
            CommonTokenStream     tokens = new CommonTokenStream(lex);
            FuncProtoToShimParser parser = new FuncProtoToShimParser(shimTemplate, tokens);

            parser.TraceDestination = Console.Error;
            parser.list();

            System.Console.WriteLine(parser.ToISystemAPI());
        }
Ejemplo n.º 16
0
        private void WeaveForOne(object sender, RoutedEventArgs e)
        {
            //選択されたパスからファイルを取得
            var targetPath = TargetPath.Text;
            var aspectPath = AspectPath.Text;

            //アスペクト情報を持つオブジェクトを生成する
            var aspect = new ANTLRFileStream(aspectPath);
            var lexer  = new UniAspectLexer(aspect);
            var tokens = new CommonTokenStream(lexer);
            var parser = new UniAspectParser(tokens);

            //アスペクトファイルを解析してASTを生成する
            var result = parser.aspect();
            var ast    = (CommonTree)result.Tree;

            //ASTを走査してパース結果をアスペクトオブジェクトとしてvisitor内に格納する
            var visitor = new AstVisitor();

            visitor.Visit(ast, 0, null);

            //対象ファイルの拡張子を取得
            var fileExtension = Path.GetExtension(targetPath);

            //対象言語のソースコードでない場合は次の対象へ進む
            string langType;

            if (fileExtension == null ||
                !TargetLanguage.TryGetValue(fileExtension, out langType))
            {
                WeavedSourceArea.Text = "指定のプログラミング言語には対応していません";
                return;
            }

            var code = File.ReadAllText(targetPath, XEncoding.SJIS);
            var gen  =
                UnifiedGenerators.GetProgramGeneratorByExtension(
                    fileExtension);
            var model = gen.Generate(code);

            Weaver.AnalizeAspect(aspectPath);
            //アスペクトの合成を行う
            Weaver.Weave(langType, model);

            //とりえあず標準出力に表示;
            var codeGen = UnifiedGenerators.GetCodeGeneratorByExtension(fileExtension);

            WeavedSourceArea.Text = codeGen.Generate(model);
        }
Ejemplo n.º 17
0
 public static void Main(string[] args)
 {
     if (args.Length > 0)
     {
         ICharStream       input  = new ANTLRFileStream(args[0]);
         SimpleLexer       lex    = new SimpleLexer(input);
         CommonTokenStream tokens = new CommonTokenStream(lex);
         SimpleParser      parser = new SimpleParser(tokens);
         parser.program();
     }
     else
     {
         Console.Error.WriteLine("Usage: island <input-file>");
     }
 }
Ejemplo n.º 18
0
        private static void _Main(string[] args)
        {
            // input "x = 2*(3+3)"

            ICharStream input;

            if (args.Length > 0)
            {
                if (args[0].Equals("-i"))
                {
                    if (args.Length > 1)
                    {
                        input = new ANTLRFileStream(args[1]);
                    }
                    else
                    {
                        throw new Exception("No input file specified.");
                    }
                }
                else
                {
                    input = new ANTLRStringStream(args[0]);
                }
            }
            else
            {
                input = new ANTLRInputStream(Console.OpenStandardInput());
            }

            var lex    = new VecMathLexer(input);
            var tokens = new CommonTokenStream(lex);
            var g      = new VecMathParser(tokens);
            IAstRuleReturnScope <CommonTree> r = g.prog();
            CommonTree t = r.Tree;

            Console.WriteLine("Original tree:   " + t.ToStringTree());

            var simplify = new Simplify(new CommonTreeNodeStream(t));

            t = (CommonTree)simplify.Downup(t);

            var reduce = new Reduce(new CommonTreeNodeStream(t));

            t = (CommonTree)reduce.Downup(t);

            Console.WriteLine("Simplified tree: " + t.ToStringTree());
            Console.ReadKey();
        }
Ejemplo n.º 19
0
        // アスペクトファイルを解析してその結果をフィールドに格納します
        public static void AnalizeAspect(string aspectPath)
        {
            //アスペクト情報を持つオブジェクトを生成する
            var aspect = new ANTLRFileStream(aspectPath);
            var lexer  = new UniAspectLexer(aspect);
            var tokens = new CommonTokenStream(lexer);
            var parser = new UniAspectParser(tokens);

            //アスペクトファイルを解析してASTを生成する
            var result = parser.aspect();
            var ast    = (CommonTree)result.Tree;

            //ASTを走査してパース結果をアスペクトオブジェクトとしてvisitor内に格納する
            _visitor = new AstVisitor();
            _visitor.Visit(ast, 0, null);
        }
Ejemplo n.º 20
0
 public static void Main(string[] args)
 {
     if (args.Length == 1)
     {
         ICharStream       input  = new ANTLRFileStream(args[0]);
         TLexer            lex    = new TLexer(input);
         CommonTokenStream tokens = new CommonTokenStream(lex);
         //System.out.println("tokens="+tokens);
         TParser parser = new TParser(tokens);
         parser.stat();
     }
     else
     {
         Console.Error.WriteLine("Usage: hoisted <input-file>");
     }
 }
Ejemplo n.º 21
0
        public static void Main(string[] args)
        {
            ANTLRFileStream   input  = new ANTLRFileStream("test.cpp");
            cvartrackerLexer  lexer  = new cvartrackerLexer(input);
            CommonTokenStream stream = new CommonTokenStream(lexer);
            cvartrackerParser parser = new cvartrackerParser(stream);

            parser.greet();

            Console.WriteLine("The collected names are:");

            foreach (string name in parser.Names)
            {
                Console.WriteLine(name);
            }
        }
Ejemplo n.º 22
0
        public static CommonTreeNodeStream parseFile(string fullName)
        {
            if (cfg.Verbosity > 2)
            {
                Console.WriteLine("Parsing " + Path.GetFileName(fullName));
            }

            ICharStream input = new ANTLRFileStream(fullName);

            PreProcessor lex = new PreProcessor();

            lex.AddDefine(cfg.MacroDefines);
            lex.CharStream       = input;
            lex.TraceDestination = Console.Error;

            CommonTokenStream tokens = new CommonTokenStream(lex);
//            if (tokens.LT(1).Type == TokenTypes.EndOfFile)
//            {
//                Console.WriteLine("File is empty");
//                return null;
//            }
            csParser p = new csParser(tokens);

            p.TraceDestination = Console.Error;
            p.IsJavaish        = cfg.InternalIsJavaish;

            csParser.compilation_unit_return parser_rt = p.compilation_unit();

            if (parser_rt == null || parser_rt.Tree == null)
            {
                if (lex.FoundMeat)
                {
                    Console.WriteLine("No Tree returned from parsing! (Your rule did not parse correctly)");
                }
                else
                {
                    // the file was empty, this is not an error.
                }
                return(null);
            }

            CommonTreeNodeStream nodes = new CommonTreeNodeStream(parser_rt.Tree);

            nodes.TokenStream = tokens;

            return(nodes);
        }
Ejemplo n.º 23
0
        public void SetUp()
        {
            //アスペクトファイルのパスを取得
            var input = new ANTLRFileStream(FixtureUtil.GetAspectPath("simple_advice_sample.apt"));

            //アスペクトファイルをパースして抽象構文木を生成する
            var lex    = new UniAspectLexer(input);
            var tokens = new CommonTokenStream(lex);
            var parser = new UniAspectParser(tokens);

            var result = parser.aspect();
            var ast    = (CommonTree)result.Tree;

            //抽象構文木を走査して、ポイントカット・アドバイス情報を格納する
            _visitor = new AstVisitor();
            _visitor.Visit(ast, 0, null);
        }
Ejemplo n.º 24
0
        public static void Main(string[] args)
        {
            ICharStream input;

            if (args.Length > 0)
            {
                input = new ANTLRFileStream(args[0]);
            }
            else
            {
                input = new ANTLRReaderStream(Console.In);
            }

            // BUILD AST
            PolyLexer         lex    = new PolyLexer(input);
            CommonTokenStream tokens = new CommonTokenStream(lex);
            PolyParser        parser = new PolyParser(tokens);

            PolyParser.poly_return r = parser.poly();
            Console.Out.WriteLine("tree=" + ((ITree)r.Tree).ToStringTree());

            // DIFFERENTIATE
            CommonTreeNodeStream nodes = new CommonTreeNodeStream(r.Tree);

            nodes.TokenStream = tokens;
            PolyDifferentiator differ = new PolyDifferentiator(nodes);

            PolyDifferentiator.poly_return r2 = differ.poly();
            Console.Out.WriteLine("d/dx=" + ((ITree)r2.Tree).ToStringTree());

            // SIMPLIFY / NORMALIZE
            nodes             = new CommonTreeNodeStream(r2.Tree);
            nodes.TokenStream = tokens;
            Simplifier reducer = new Simplifier(nodes);

            Simplifier.poly_return r3 = reducer.poly();
            Console.Out.WriteLine("simplified=" + ((ITree)r3.Tree).ToStringTree());

            // CONVERT BACK TO POLYNOMIAL
            nodes             = new CommonTreeNodeStream(r3.Tree);
            nodes.TokenStream = tokens;
            PolyPrinter printer = new PolyPrinter(nodes);

            PolyPrinter.poly_return r4 = printer.poly();
            Console.Out.WriteLine(r4.ST);
        }
        public override Antlr4.StringTemplate.Compiler.CompiledTemplate LoadAbsoluteTemplateFile(string fileName)
        {
            ANTLRFileStream antlrFileStream;

            try
            {
                antlrFileStream      = new ANTLRFileStream(fileName, this.Encoding);
                antlrFileStream.name = fileName;
            }
            catch (IOException ex)
            {
                return((CompiledTemplate)null);
            }
            return(this.LoadTemplateFile("", fileName, (ICharStream)antlrFileStream));

            return(base.LoadAbsoluteTemplateFile(fileName));
        }
Ejemplo n.º 26
0
        public static int Compile(string inputPath, string outputPath)
        {
            try
            {
                ANTLRFileStream input = new ANTLRFileStream(inputPath);
                //LexicalAnalysis
                TigerLexer        lexer       = new TigerLexer(input);
                CommonTokenStream tokenStream = new CommonTokenStream(lexer);

                //SintaxAnalysis
                TigerParser parser = new TigerParser(tokenStream); //Use tokens obtained by lexer
                parser.TreeAdaptor = new ASTFactory();             //Use my ASTFactory
                TigerParser.tiger_program_return tigerProgram = parser.tiger_program();

                //**Check lexical and sintax errors

                if (lexer.Errors.Count == 0 && parser.Errors.Count == 0)
                {
                    //SemanticAnalysis
                    List <Error>    semanticErrors = new List <Error>();
                    SymbolTable     symbolTable    = new SymbolTable();
                    InstructionNode decoratedExpr  = tigerProgram.Tree as InstructionNode;
                    decoratedExpr.CheckSemantic(semanticErrors, symbolTable);
                    if (semanticErrors.Count == 0)
                    {
                        TypeExpression programReturnType = decoratedExpr.ReturnType.PrimitiveType;
                        if (programReturnType is BuiltInType || programReturnType is NilType)
                        {
                            ProgramGenerator.BuildTigerProgram(outputPath, decoratedExpr);
                            return(ReportCompilationSuccesful(inputPath));
                        }
                        string message = "If program isn't a valueless expression its return type has to be a built-in type";
                        semanticErrors.Add(new Error(message, decoratedExpr.Line, decoratedExpr.CharPositionInLine));
                    }
                    return(ReportCompilationFailed(semanticErrors));
                }
                IEnumerable <Error> antlrErrors = lexer.Errors.Union(parser.Errors);
                return(ReportCompilationFailed(antlrErrors));
            }
            catch (Exception e)
            {
                IEnumerable <Error> exeption = new[] { new Error(e.Message, 0, 0, ErrorKind.UserError) };
                return(ReportCompilationFailed(exeption));
            }
        }
Ejemplo n.º 27
0
        public AstVisitor CreateAspectElement(string path)
        {
            //アスペクトファイルの生成
            var aspect = new ANTLRFileStream(path);
            var lexer  = new UniAspectLexer(aspect);
            var tokens = new CommonTokenStream(lexer);
            var parser = new UniAspectParser(tokens);

            //アスペクトファイルを解析してASTを生成する
            var result = parser.aspect();
            var ast    = (CommonTree)result.Tree;

            var visitor = new AstVisitor();

            visitor.Visit(ast, 0, null);

            return(visitor);
        }
Ejemplo n.º 28
0
 public static void Main(string[] args)
 {
     if (args.Length > 0)
     {
         ICharStream       input          = new ANTLRFileStream(args[0]);
         PythonLexer       lexer          = new MyLexer(input);
         CommonTokenStream tokens         = new CommonTokenStream(lexer);
         PythonTokenSource indentedSource = new PythonTokenSource(tokens);
         tokens = new CommonTokenStream(indentedSource);
         //Console.Out.WriteLine("tokens="+tokens.GetTokens());
         PythonParser parser = new PythonParser(tokens);
         parser.file_input();
     }
     else
     {
         Console.Error.WriteLine("Usage: dynscope <input-file>");
     }
 }
Ejemplo n.º 29
0
 public static ProgramNode ParseInput(string inputPath)
 {
     try
     {
         ANTLRFileStream   input  = new ANTLRFileStream(inputPath);
         TigerLexer        lexer  = new TigerLexer(input);
         CommonTokenStream tokens = new CommonTokenStream(lexer);
         TigerParser       parser = new TigerParser(tokens);
         parser.TreeAdaptor = new Adaptor();
         var program = (ProgramNode)parser.program().Tree;
         return(program);
     }
     catch (ParsingException exc)
     {
         Console.WriteLine("({1},{2}): {0}", exc.Message, exc.RecognitionError.Line, exc.RecognitionError.CharPositionInLine);
         Environment.ExitCode = (int)ErrorCode.Error;
         return(null);
     }
 }
Ejemplo n.º 30
0
        public static COOLCommonTree Parse(string code)
        {
            var               stringStream = new ANTLRFileStream(code);
            COOLLexer         lexer        = new COOLLexer(stringStream);
            CommonTokenStream stream       = new CommonTokenStream(lexer);
            COOLParser        parser       = new COOLParser(stream);
            ITreeAdaptor      adaptor      = new COOLCommonTreeAdaptor();

            parser.TreeAdaptor      = adaptor;
            parser.TraceDestination = Console.Out;
            var tree = parser.program();

            if (parser.NumberOfSyntaxErrors > 0)
            {
                Console.WriteLine("Compilation terminated because of sintax errors");
                return(null);
            }
            return(tree.Tree);
        }
Ejemplo n.º 31
0
        public static void Main(string[] args)
        {
            ICharStream input;
            if ( args.Length>0 ) {
            input = new ANTLRFileStream(args[0]);
            }
            else {
            input = new ANTLRReaderStream(Console.In);
            }

            // BUILD AST
            PolyLexer lex = new PolyLexer(input);
            CommonTokenStream tokens = new CommonTokenStream(lex);
            PolyParser parser = new PolyParser(tokens);
            PolyParser.poly_return r = parser.poly();
            Console.Out.WriteLine("tree="+((ITree)r.Tree).ToStringTree());

            // DIFFERENTIATE
               	CommonTreeNodeStream nodes = new CommonTreeNodeStream(r.Tree);
            nodes.TokenStream = tokens;
            PolyDifferentiator differ = new PolyDifferentiator(nodes);
            PolyDifferentiator.poly_return r2 = differ.poly();
            Console.Out.WriteLine("d/dx="+((ITree) r2.Tree).ToStringTree());

            // SIMPLIFY / NORMALIZE
               	nodes = new CommonTreeNodeStream(r2.Tree);
            nodes.TokenStream = tokens;
            Simplifier reducer = new Simplifier(nodes);
            Simplifier.poly_return r3 = reducer.poly();
            Console.Out.WriteLine("simplified="+((ITree) r3.Tree).ToStringTree());

            // CONVERT BACK TO POLYNOMIAL
               	nodes = new CommonTreeNodeStream(r3.Tree);
            nodes.TokenStream = tokens;
            PolyPrinter printer = new PolyPrinter(nodes);
            PolyPrinter.poly_return r4 = printer.poly();
            Console.Out.WriteLine(r4.ST);
        }