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); } }
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(); }
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(); }