Ejemplo n.º 1
0
        public void testScanner3()
        {
            var source           = @"#if XXX
class
#else
interface
#endif
C {
}
";
            var codeErrorManager = new CodeErrorManager();
            var preprocessor     = new Preprocessor(codeErrorManager, source.toCharArray());
            var scanner          = new PreprocessedTextScanner(codeErrorManager, preprocessor.preprocess());

            Assert.assertEquals(LexicalUnit.Keyword, scanner.nextLexicalUnit());
            RestorePoint rp = scanner.createRestorePoint();

            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Identifier, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Whitespace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.OpenBrace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            scanner.restore(rp);
            Assert.assertEquals(LexicalUnit.Keyword, scanner.nextLexicalUnit());
            Assert.assertEquals("interface", new String(scanner.Text, scanner.StartPosition, scanner.EndPosition - scanner.StartPosition));
            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Identifier, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Whitespace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.OpenBrace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.CloseBrace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.EndOfStream, scanner.nextLexicalUnit());
        }
Ejemplo n.º 2
0
        public void testScanner()
        {
            var source           = @"
class C {
}
";
            var codeErrorManager = new CodeErrorManager();
            var preprocessor     = new Preprocessor(codeErrorManager, source.toCharArray());
            var scanner          = new PreprocessedTextScanner(codeErrorManager, preprocessor.preprocess());

            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Keyword, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Whitespace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Identifier, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.Whitespace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.OpenBrace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.CloseBrace, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.NewLine, scanner.nextLexicalUnit());
            Assert.assertEquals(LexicalUnit.EndOfStream, scanner.nextLexicalUnit());
        }
Ejemplo n.º 3
0
        private void parse(IFile file, char[] text, CodeErrorManager errorManager, Map <String, CompilationUnitNode> compilationUnits)
        {
            var filename = parameters.AllFiles.getProjectRelativeName(file);

            var preprocessor = new Preprocessor(errorManager, text);

            preprocessor.setFilename(filename);
            preprocessor.Symbols.addAll(parameters.PreprocessorSymbols);
            var preprocessedText = preprocessor.preprocess();

            var parser  = new Parser();
            var scanner = new PreprocessedTextScanner(errorManager, preprocessedText);

            scanner.setFilename(filename);
            scanner.setTabWidth(Environment.getTabWidth());

            var compilationUnit = parser.parseCompilationUnit(scanner);

            if (compilationUnit != null)
            {
                compilationUnit.setSymbols(preprocessor.Symbols);
                compilationUnits[filename] = compilationUnit;
            }
        }