Beispiel #1
0
        public static void Main(string[] args)
        {
            try {
                // open a simple stream to the input
                CharBuffer input = new CharBuffer(Console.In);

                // attach java lexer to the input stream,
                mainLexer = new PLexer(input);

                // notify selector about starting lexer; name for convenience
                selector.addInputStream(mainLexer, "main");
                selector.select("main"); // start with main P lexer

                // Create parser attached to selector
                parser = new PParser(selector);

                // Parse the input language: P
                parser.setFilename("<stdin>");
                parser.startRule();
            }
            catch (Exception e) {
                Console.Error.WriteLine("exception: " + e);
                Console.Error.WriteLine(e.StackTrace);  // so we can get stack trace
            }
        }
Beispiel #2
0
    public static void Main(String[] args)
    {
        try {
            // open a simple stream to the input
            ByteBuffer input = new ByteBuffer(Console.OpenStandardInput());

            // attach java lexer to the input stream, which also creates a shared input state object
            DemoJavaLexer main = new DemoJavaLexer(input);

            // create javadoc lexer; attach to same shared input state as java lexer
            DemoJavaDocLexer doclexer = new DemoJavaDocLexer(main.getInputState());

            // notify selector about various lexers; name them for convenient reference later
            selector.addInputStream(main, "main");
            selector.addInputStream(doclexer, "doclexer");
            selector.select("main"); // start with main java lexer

            // Create parser attached to selector
            DemoJavaParser parser = new DemoJavaParser(selector);

            // Pull in one or more int decls with optional javadoc
            parser.input();

            /*
             * // spin thru all tokens generated via the SELECTOR.
             * Token t;
             * while ( (t=selector.nextToken()).Type!=main.EOF ) {
             *        Console.Out.WriteLine(t.ToString());
             * }
             */
        }
        catch (Exception e) {
            Console.Error.WriteLine("exception: " + e);
            Console.Error.WriteLine(e.StackTrace);      // so we can get stack trace
        }
    }
Beispiel #3
0
        // Here's where we do the real work...
        public static void  parseFile(string f, Stream s)
        {
            try
            {
                // Define a selector that can switch from the C# codelexer to the C# preprocessor lexer
                TokenStreamSelector selector = new TokenStreamSelector();

                TokenStream lexer;
                // Create a scanner that reads from the input stream passed to us
                if (useFlexLexer)
                {
                    CSharpFlexLexer flexLexer = new CSharpFlexLexer(new StreamReader(s));
                    flexLexer.SetFileInfo(new FileInfo(f));
                    lexer = flexLexer;
                }
                else
                {
                    CSharpLexer antlrLexer = new CSharpLexer(new StreamReader(s));

                    antlrLexer.Selector = selector;
                    antlrLexer.setFilename(f);
                    CSharpPreprocessorLexer preproLexer = new CSharpPreprocessorLexer(antlrLexer.getInputState());
                    preproLexer.Selector = selector;
                    CSharpPreprocessorHooverLexer hooverLexer = new CSharpPreprocessorHooverLexer(antlrLexer.getInputState());
                    hooverLexer.Selector = selector;

                    // use the special token object class
                    antlrLexer.setTokenCreator(new CustomHiddenStreamToken.CustomHiddenStreamTokenCreator());
                    antlrLexer.setTabSize(1);
                    preproLexer.setTokenCreator(new CustomHiddenStreamToken.CustomHiddenStreamTokenCreator());
                    preproLexer.setTabSize(1);
                    hooverLexer.setTokenCreator(new CustomHiddenStreamToken.CustomHiddenStreamTokenCreator());
                    hooverLexer.setTabSize(1);

                    // notify selector about various lexers; name them for convenient reference later
                    selector.addInputStream(antlrLexer, "codeLexer");
                    selector.addInputStream(preproLexer, "directivesLexer");
                    selector.addInputStream(hooverLexer, "hooverLexer");
                    selector.select("codeLexer");                     // start with main the CSharp code lexer
                    lexer = selector;
                }

                // create the stream filter; hide WS and SL_COMMENT
                TokenStreamHiddenTokenFilter filter;                 // = new TokenStreamHiddenTokenFilter(lexer);
                if (displayTokens)
                {
                    filter = new TokenStreamHiddenTokenFilter(new LoggingTokenStream(lexer));
                }
                else
                {
                    filter = new TokenStreamHiddenTokenFilter(lexer);
                }

                filter.hide(CSharpTokenTypes.WHITESPACE);
                filter.hide(CSharpTokenTypes.NEWLINE);
                filter.hide(CSharpTokenTypes.ML_COMMENT);
                filter.hide(CSharpTokenTypes.SL_COMMENT);

                // Create a parser that reads from the scanner
                CSharpParser parser = new CSharpParser(filter);

                // create trees that copy hidden tokens into tree also
                parser.setASTNodeClass(typeof(ASTNode).FullName);
                parser.setASTFactory(new ASTNodeFactory());
                CSharpParser.initializeASTFactory(parser.getASTFactory());
                parser.setFilename(f);
                //parser.getASTFactory().setASTNodeCreator(new ASTNode.ASTNodeCreator());

                // start parsing at the compilationUnit rule
                long startTime = DateTime.Now.Ticks;
                parser.compilationUnit();
                double elapsedTime = ((DateTime.Now.Ticks - startTime) / TimeSpan.TicksPerMillisecond) / 1000.0;
                System.Console.Out.WriteLine("Parsed {0} in: {1} seconds.", f, elapsedTime);

                // do something with the tree
                Console.Error.WriteLine("       ... calling doTreeAction:");
                doTreeAction(f, (ASTNode)parser.getAST(), parser.getTokenNames());
            }
            catch (System.Exception e)
            {
                Console.Error.WriteLine("parser exception: " + e);
                Console.Error.WriteLine(e.StackTrace);                 // so we can get stack trace
            }
        }
        /// <summary>
        /// Parses the specified file
        /// </summary>
        /// <param name="f">File information.</param>
        /// <param name="s">Stream with the file code.</param>
        /// <param name="dynamic">Using "dynamic" to refer to a "dynamic var"</param>
        private void parseFile(FileInfo f, Stream s, bool dynamic)
        {
            ICSharpLexer  antlrLexer;
            ICSharpParser parser;
            TokenStreamHiddenTokenFilter filter;

            try {
                TokenStream lexer;

                // Create a scanner that reads from the input stream passed to us
                if (dynamic)
                {
                    antlrLexer = new CSharpLexerDynamic(new StreamReader(s));
                }
                else
                {
                    antlrLexer = new CSharpLexer(new StreamReader(s));
                }

                // Define a selector that can switch from the C# codelexer to the C# preprocessor lexer
                TokenStreamSelector selector = new TokenStreamSelector();
                antlrLexer.Selector = selector;
                antlrLexer.setFilename(f.Name);

                CSharpPreprocessorLexer preproLexer = new CSharpPreprocessorLexer(antlrLexer.getInputState());
                preproLexer.Selector = selector;
                CSharpPreprocessorHooverLexer hooverLexer = new CSharpPreprocessorHooverLexer(antlrLexer.getInputState());
                hooverLexer.Selector = selector;

                // use the special token object class
                antlrLexer.setTokenCreator(new CustomHiddenStreamToken.CustomHiddenStreamTokenCreator());
                antlrLexer.setTabSize(1);
                preproLexer.setTokenCreator(new CustomHiddenStreamToken.CustomHiddenStreamTokenCreator());
                preproLexer.setTabSize(1);
                hooverLexer.setTokenCreator(new CustomHiddenStreamToken.CustomHiddenStreamTokenCreator());
                hooverLexer.setTabSize(1);

                // notify selector about various lexers; name them for convenient reference later
                selector.addInputStream(antlrLexer, "codeLexer");
                selector.addInputStream(preproLexer, "directivesLexer");
                selector.addInputStream(hooverLexer, "hooverLexer");
                selector.select("codeLexer"); // start with main the CSharp code lexer
                lexer = selector;

                // create the stream filter; hide WS and SL_COMMENT
                filter = new TokenStreamHiddenTokenFilter(lexer);
                filter.hide(CSharpTokenTypes.WHITESPACE);
                filter.hide(CSharpTokenTypes.NEWLINE);
                filter.hide(CSharpTokenTypes.ML_COMMENT);
                filter.hide(CSharpTokenTypes.SL_COMMENT);

                //------------------------------------------------------------------

                // Create a parser that reads from the scanner
                if (dynamic)
                {
                    parser = new CSharpParserDynamic(filter);
                    DynVarManager.DynamicOption = true;
                }
                else
                {
                    parser = new CSharpParser(filter);
                }
                parser.setFilename(f.FullName);
                //parser.setFilename(f.Name);

                // Start parsing at the compilationUnit rule
                long startTime = DateTime.Now.Ticks;

                this.astList.Add(parser.compilationUnit());

    #if DEBUG
                double       elapsedTime   = ((DateTime.Now.Ticks - startTime) / TimeSpan.TicksPerMillisecond) / 1000.0;
                ConsoleColor previousColor = Console.ForegroundColor;
                Console.ForegroundColor = ConsoleColor.DarkGray;
                System.Console.Out.WriteLine("Parsed {0} in: {1} seconds.", f.Name, elapsedTime);
                Console.ForegroundColor = previousColor;
    #endif
            }
            catch (RecognitionException e)
            {
                ErrorManager.Instance.NotifyError(new ParserError(new Location(e.fileName, e.line, e.column), e.Message));
            }
        }