Example #1
0
        internal static List <Instruction> GetRawBytecode(List <SourceFile> sources)
        {
            // Tokenize files.
            var tokenizedFiles = new List <List <Token> >();

            foreach (var sourceFile in sources)
            {
                var tokenizer = new Shovel.Compiler.Tokenizer(sourceFile);
                tokenizedFiles.Add(tokenizer.Tokens);
            }
            // Parse files.
            var parseForests = new List <List <ParseTree> >();

            foreach (var tokenizedFile in tokenizedFiles)
            {
                var parser = new Shovel.Compiler.Parser(tokenizedFile, sources);
                parseForests.Add(parser.ParseTrees);
            }
            // Flatten the forests of parse trees into one for code generation.
            var bigParseForest = new List <ParseTree>();

            foreach (var parseTrees in parseForests)
            {
                bigParseForest.AddRange(parseTrees);
            }
            // Generate the code.
            var codeGenerator = new Shovel.Compiler.CodeGenerator(bigParseForest, sources);

            return(codeGenerator.Bytecode);
        }
Example #2
0
 internal static List<Instruction> GetRawBytecode(List<SourceFile> sources)
 {
     // Tokenize files.
     var tokenizedFiles = new List<List<Token>>();
     foreach (var sourceFile in sources)
     {
         var tokenizer = new Shovel.Compiler.Tokenizer(sourceFile);
         tokenizedFiles.Add(tokenizer.Tokens);
     }
     // Parse files.
     var parseForests = new List<List<ParseTree>>();
     foreach (var tokenizedFile in tokenizedFiles)
     {
         var parser = new Shovel.Compiler.Parser(tokenizedFile, sources);
         parseForests.Add(parser.ParseTrees);
     }
     // Flatten the forests of parse trees into one for code generation.
     var bigParseForest = new List<ParseTree>();
     foreach (var parseTrees in parseForests)
     {
         bigParseForest.AddRange(parseTrees);
     }
     // Generate the code.
     var codeGenerator = new Shovel.Compiler.CodeGenerator(bigParseForest, sources);
     return codeGenerator.Bytecode;
 }