using System; using System.Collections.Generic; using System.IO; namespace luaaaaah; public class Program { public static void Main(string[] args) { switch(args[0]) { case "test": { Test(args[1]); } break; case "run": { Run(args[1], true); } break; } } public static void Run(string file, bool debug) { Token[] tokens = new Tokenizer().Tokenize(File.ReadAllText(file)); if(debug) { foreach(Token token in tokens) { Console.WriteLine($"{token.region}: {token.type} {{{token.data}}}"); } } Parser.ChunkNode root = new Parser().Parse(tokens); Console.WriteLine("Parsed tree:"); Console.WriteLine("\tStats:"); foreach(Parser.StatNode node in root.block.stats) { Console.WriteLine($"\t\t{node.startRegion}-{node.endRegion}: {node.GetType()}"); } Console.WriteLine($"\tRetstat: {root.block.retstat?.startRegion}-{root.block.retstat?.endRegion}"); } static readonly Dictionary failedFiles = []; public static void Test(string directory) { TestRecursive(directory); Console.WriteLine("===FAILED==="); foreach(KeyValuePair entry in failedFiles) { Console.WriteLine($"{entry.Key}: {entry.Value}"); } } public static void TestRecursive(string directory) { foreach(string file in Directory.EnumerateFiles(directory)) { if(file.EndsWith(".lua")) { try { Run(file, false); } catch(Exception e) { Console.WriteLine($"{file}: {e}"); failedFiles.Add(file, e.ToString()); } } } foreach(string dir in Directory.EnumerateDirectories(directory)) { TestRecursive(dir); } } }