コード例 #1
0
        public void Compile()
        {
            using (var fileStream = new StreamReader(_stream))
            {
                var inputStream     = new AntlrInputStream(fileStream);
                var lexer           = new CLexer(inputStream);
                var tokenStream     = new CommonTokenStream(lexer);
                var parser          = new CParser(tokenStream);
                var compilationUnit = parser.compilationUnit();

                if (parser.NumberOfSyntaxErrors == 0 && compilationUnit != null)
                {
                    var preBuilder = new CPreBuilder(
                        _fileName,
                        compilationUnit);
                    var cilCodeGenerator = new CILCodeGenerator(preBuilder);

                    cilCodeGenerator.Generate();

                    if (File.Exists(preBuilder.ProgramFileName))
                    {
                        OutputFileName = preBuilder.ProgramFileName;
                    }
                }
            }
        }
コード例 #2
0
        public void ParseC() {
            var inputStream = new AntlrInputStream(@"
int main(int argc, char **args) {
	printf(args[0]);
	return 0;
}");
            var lexer = new CLexer(inputStream);
            var commonTokenStream = new CommonTokenStream(lexer);
            var parser = new CParser(commonTokenStream);
            var visitor = new CstBuilderForAntlr4(parser);
            visitor.Visit(parser.compilationUnit());
            Console.WriteLine(visitor.FinishParsing());
        }
コード例 #3
0
        public void ParseC()
        {
            var inputStream       = new AntlrInputStream(@"
int main(int argc, char **args) {
	printf(args[0]);
	return 0;
}");
            var lexer             = new CLexer(inputStream);
            var commonTokenStream = new CommonTokenStream(lexer);
            var parser            = new CParser(commonTokenStream);
            var visitor           = new CstBuilderForAntlr4(parser);

            visitor.Visit(parser.compilationUnit());
            Console.WriteLine(visitor.FinishParsing());
        }
コード例 #4
0
ファイル: SpringParser.cs プロジェクト: Fatalll/Spring
        public IFile ParseFile()
        {
            using (var def = Lifetime.Define())
            {
                var builder  = new PsiBuilder(myLexer, SpringFileNodeType.Instance, new TokenFactory(), def.Lifetime);
                var fileMark = builder.Mark();

                var parser = new CParser(new CommonTokenStream(new CLexer(new AntlrInputStream(myLexer.Buffer.GetText()))));
                parser.AddErrorListener(new ErrorListener(builder));
                new Visitor(builder).Visit(parser.compilationUnit());

                builder.Done(fileMark, SpringFileNodeType.Instance, null);
                var file = (IFile)builder.BuildTree();
                return(file);
            }
        }
コード例 #5
0
ファイル: CParserTest.cs プロジェクト: victor-wiki/CodeParser
        public override void Parse(FileInfo file)
        {
            Lexer lexer = new CLexer(CharStreams.fromPath(file.FullName));

            CommonTokenStream tokens = new CommonTokenStream(lexer);

            CParser parser = new CParser(tokens);

            ParserRuleContext context = parser.compilationUnit();

            var children = context.children;

            foreach (IParseTree child in children)
            {
                this.ParseNode(child);
            }
        }
コード例 #6
0
        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);
            }
        }
コード例 #7
0
        public IFile ParseFile()
        {
            using (var def = Lifetime.Define())
            {
                var builder = new PsiBuilder(new CILexer(myLexer.Buffer), SpringFileNodeType.Instance, new TokenFactory(), def.Lifetime);

                string  inputText   = myLexer.Buffer.GetText();
                var     tokenStream = new CommonTokenStream(new CLexer(new AntlrInputStream(inputText)));
                CParser cParser     = new CParser(tokenStream);
                cParser.AddErrorListener(new ParserErrorListener(builder));
                var visitor = new BuilderVisitor(builder);

                var fileMark = builder.Mark();

                CParser.CompilationUnitContext fileContext = cParser.compilationUnit();
                visitor.Visit(fileContext);

                builder.Done(fileMark, SpringFileNodeType.Instance, null);
                var file = (IFile)builder.BuildTree();
                return(file);
            }
        }
コード例 #8
0
        public void MyParseMethod()
        {
            MyCListener      myCListener = new MyCListener();
            String           input       = "int x = 4;";
            AntlrInputStream stream      = new AntlrInputStream(input);
            ITokenSource     lexer       = new CLexer(stream);
            ITokenStream     tokens      = new CommonTokenStream(lexer);
            CParser          parser      = new CParser(tokens);

            parser.BuildParseTree = true;
            //IParseTree tree = parser.primaryExpression();
            IParseTree tree = parser.compilationUnit();
            //Console.WriteLine(tree.ToStringTree());
            ParseTreeWalker parseTreeWalker = new ParseTreeWalker();

            parseTreeWalker.Walk(myCListener, tree);

            for (int i = 0; i < myCListener.typeList.Count(); i++)
            {
                Console.WriteLine(myCListener.typeList[i]);
            }
        }
コード例 #9
0
        do_parse
        (
            string Declaration
        )
        {
            //
            // Declare the various streams of characters and tokens for parsing the input
            //

            AntlrInputStream     input_stream = new AntlrInputStream(Declaration);          // Create a stream that reads from the input source
            CLexer               lexer        = new CLexer(input_stream);                   // Create a lexer that feeds off of the input stream
            CommonTokenStream    tokens       = new CommonTokenStream(lexer);               // Create a buffer of tokens pulled from the lexer
            CParser              parser       = new CParser(tokens);                        // Create a parser that feeds off of the token buffer
            ParserRuleContext    tree         = parser.compilationUnit();                   // Call the compilationUnit rule in the grammar to build a parse tree from the input
            C_Listener_Overrides my_listeners = new C_Listener_Overrides();                 // Instantiate my listener override functions so they can be used by ParseTreeWalker

            //
            // Call all the listeners
            //

            ParseTreeWalker.Default.Walk(my_listeners, tree);

            return(my_listeners.function_def);
        }           // End parse_declaration