Inheritance: LexicalAnalysis.ScanBase, IColorScan
Esempio n. 1
0
        public void TestCompiler() {
            Console.WriteLine(Directory.GetCurrentDirectory());

            var files = Directory
                .GetFiles("../../TestPrograms")
                .Where(_ => _.EndsWith(".c"));

            var sources = files.Select(File.ReadAllText).ToArray();

            foreach (var source in sources) {
                var scanner = new Scanner(source);
                var tokens = scanner.Tokens;
                var env = new ParserEnvironment();
                var input = new ParserInput(env, tokens);
                var parserResult = CParsers.TranslationUnit.Parse(input);
                var semantResult = parserResult.Result.GetTranslnUnit();
                semantResult.Value.CodeGenerate(new CGenState());
            }
        }
        public void TestParser() {
            System.Console.WriteLine(Directory.GetCurrentDirectory());

            var files = Directory
                .GetFiles("../../TestPrograms")
                .Where(_ => _.EndsWith(".c"));

            var sources = files.Select(File.ReadAllText).ToArray();

            foreach (var source in sources) {
                var scanner = new Scanner(source);
                var tokens = scanner.Tokens;
                var env = new ParserEnvironment();
                var input = new ParserInput(env, scanner.Tokens);
                var result = CParsers.TranslationUnit.Parse(input);
                Assert.IsTrue(result.IsSuccessful);
                Assert.IsTrue(result.Source.Count() == 1);
            }
        }
Esempio n. 3
0
        private static void Compile(IList<string> args)
        {
            var scan = new Scanner();
            scan.SetSource(GetSource(args), 0);

            var parser = new Parser(scan);
            if (!parser.Parse())
            {
                Console.WriteLine("Parsing failed!");
                return;
            }

            var root = parser.SyntaxTreeRoot;
            Console.WriteLine(root.Print(0));

            RunSemanticPasses(root);
            GenerateIntermediateCode(args[0], root);

            Console.Read();
        }
Esempio n. 4
0
        private Compiler(String source) {
            this.Source = source;

            // Lexical analysis
            Scanner scanner = new Scanner(source);
            this.Tokens = scanner.Tokens.ToImmutableList();

            // Parse
            var parserResult = CParsers.Parse(this.Tokens);
            if (parserResult.Source.Count() != 1) {
                throw new InvalidOperationException("Error: not finished parsing");
            }
            this.SyntaxTree = parserResult.Result;

            // Semantic analysis
            var semantReturn = this.SyntaxTree.GetTranslnUnit();
            this.AbstractSyntaxTree = semantReturn.Value;
            this.Environment = semantReturn.Env;

            // Code generation
            var state = new CGenState();
            this.AbstractSyntaxTree.CodeGenerate(state);
            this.Assembly = state.ToString();
        }
        private bool Parse(string source)
        {
            var scan = new Scanner();
            scan.SetSource(File.ReadAllText(source), 0);

            var parser = new Parser(scan);
            return parser.Parse();
        }
        private static void CompileAndBuildExecutable()
        {
            var scan = new Scanner();
            scan.SetSource(File.ReadAllText(FILE_LOCATION), 0);

            var parser = new Parser(scan);
            parser.Parse();

            var root = parser.SyntaxTreeRoot;
            var mgr = new ScopeManager();

            var first = new FirstPass(root, mgr);
            var second = new SecondPass(root, mgr);
            first.Run();
            second.Run();

            const string asmName = "sample1-test";
            var cg = new CodeGenerator(asmName);
            cg.Generate(root);
            cg.WriteAssembly();
        }