Example #1
0
        public CParser CreateParser(string code)
        {
            ICharStream stream = CharStreams.fromstring(code);
            var         lexer  = new CLexer(stream);

            lexer.AddErrorListener(new ThrowExceptionErrorListener());
            ITokenStream tokens = new CommonTokenStream(lexer);
            var          parser = new CParser(tokens);

            parser.BuildParseTree = true;
            parser.RemoveErrorListeners();
            parser.AddErrorListener(new ThrowExceptionErrorListener());
            return(parser);
        }
        public string Compile(ICharStream cSource)
        {
            CLexer            lexer  = new CLexer(cSource);
            CommonTokenStream tokens = new CommonTokenStream(lexer);
            CParser           parser = new CParser(tokens);

            parser.RemoveErrorListeners();

            parser.AddErrorListener(this);

            try
            {
                CParser.CompilationUnitContext compilationUnit = parser.compilationUnit();
                ParseTreeWalker walker = new ParseTreeWalker();

                walker.Walk(this, compilationUnit);

                string idents = "";

                foreach (CIdentifier ident in CIdentifier.FileScopeIdentifiers)
                {
                    if (ident.Name.Equals("main"))
                    {
                        idents = ident.Emit() + idents;
                    }
                    else
                    {
                        idents += ident.Emit();
                    }
                }

                return(idents);
            }
            catch (SemanticException e)
            {
                m_outStream.WriteLine("Compilation Failed: " + e.Message);
                return(null);
            }
        }