static void Main(string[] args) { TestRename(); TestInline(); TestFindImpl(); TestFindRef(); TestExtractDocComments(); while (true) { string line = Console.ReadLine(); try { Lexer l = new Lexer(); TokenReader r = l.Lex(line); //Console.WriteLine("---------------------------------"); foreach (Token t in r.tokens) { Console.WriteLine(t.Print()); foreach (Token t2 in t.Leading) { Console.WriteLine(" " + t2.Print()); } } //Console.WriteLine("- PARSER OUTPUT -"); Parser p = new Parser(r); Chunk c = p.Parse(); Console.WriteLine("- Simplifying -"); c = (Chunk)c.Simplify(); Console.WriteLine("- Success! -"); //dump(c.Body); Console.WriteLine("- Basic Beautifier (No Token Stream) -"); Visitors.BasicBeautifier b = new Visitors.BasicBeautifier(); Console.WriteLine(b.Beautify(c)); Console.WriteLine("- Lua Compatible -"); Visitors.LuaCompatibleOutput lco = new Visitors.LuaCompatibleOutput(); Console.WriteLine(lco.Format(c)); Console.WriteLine("- Exact reconstruction -"); Console.WriteLine(new Visitors.ExactReconstruction().Reconstruct(c)); Console.WriteLine("- Minified -"); Console.WriteLine(new Visitors.Minifier().Minify(c)); Console.WriteLine("- Beautifier -"); Console.WriteLine(new Visitors.Beautifier().Beautify(c)); Console.WriteLine("- NonModifiedAstBeautifer -"); Console.WriteLine(new Visitors.NonModifiedAstBeautifier().Beautify(c)); Console.WriteLine("- Misspelled Variables -"); List <Tuple <Variable, Variable> > vars = Refactoring.FindMisspelledVariables(c); //Console.WriteLine(vars.Count); foreach (Tuple <Variable, Variable> v in vars) { Console.WriteLine(v.Item1.Name + " is close to " + v.Item2.Name); Console.Write("\t"); if (v.Item1.References > v.Item2.References) { Console.WriteLine(v.Item1.Name + " is the best match with " + v.Item1.References + " references"); } else if (v.Item1.References < v.Item2.References) { Console.WriteLine(v.Item2.Name + " is the best match with " + v.Item2.References + " references"); } else { Console.WriteLine("Both have the same amount of references (" + v.Item1.References + ")!"); } } List <Variable> unused = Refactoring.FindUnusedVariables(c); Console.WriteLine("- Unused Variables -"); foreach (Variable v in unused) { Console.WriteLine(" " + v.Name); } unused = Refactoring.FindUnusedLocalVariables(c); Console.WriteLine("- Unused Local Variables -"); foreach (Variable v in unused) { Console.WriteLine(" " + v.Name); } Refactoring.AddModuleDependency(c, "module1"); Refactoring.AddModuleDependency(c, "module2", "local_module2"); Refactoring.AddClrDependency(c, "AClrLib", "AClrLib.NamespaceA.AClrType"); Console.WriteLine("- With Added Dependencies -"); Console.WriteLine(new Visitors.Beautifier().Beautify(c)); c.Scope.ObfuscateLocals(); Console.WriteLine("- With obfuscated locals"); Console.WriteLine(new Visitors.Beautifier().Beautify(c)); } catch (LuaSourceException ex) { Console.WriteLine(line); Console.WriteLine(" ".Repeat(ex.Column - 1) + "^"); Console.WriteLine("<stdin>:" + ex.Line + ":" + ex.Column + ":" + ex.Message); Console.WriteLine(ex.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } } }
public static int lua_load(LuaState L, lua_Reader reader, object data, CharPtr chunkname) { ZIO z = new ZIO(); int status; lua_lock(L); if (chunkname == null) { chunkname = "?"; } if (data is LoadS) { LoadS d = data as LoadS; if (d.size > 0) { Lexer l = new Lexer(); try { //Console.WriteLine(d.s); TokenReader tr = l.Lex(d.s); Parser p = new Parser(tr); Ast.Chunk c = p.Parse(); Visitors.LuaCompatibleOutput lco = new Visitors.LuaCompatibleOutput(); string s = lco.Format(c); d.s = s; d.size = (lu_mem)s.Length; } catch (LuaSourceException ex) { throw ex; } } } else if (data is LoadF) { LoadF lf = data as LoadF; MemoryStream ms = new MemoryStream(); while (lf.f.Position < lf.f.Length) { ms.WriteByte((byte)lf.f.ReadByte()); } ms.Position = 0; if (ms.ReadByte() != 27) { // not binary file ms.Position = 0; StringBuilder sb = new StringBuilder(); while (ms.Position < ms.Length) { sb.Append((char)ms.ReadByte()); } try { Lexer l = new Lexer(); TokenReader tr = l.Lex(sb.ToString()); Parser p = new Parser(tr); Ast.Chunk c = p.Parse(); Visitors.LuaCompatibleOutput lco = new Visitors.LuaCompatibleOutput(); string s = lco.Format(c); ms = new MemoryStream(); // TODO: there HAS to be a better way... foreach (char c2 in s) { ms.WriteByte((byte)c2); } ms.Position = 0; lf.f = ms; } catch (LuaSourceException ex) { throw ex; } } } luaZ_init(L, z, reader, data); status = luaD_protectedparser(L, z, chunkname); lua_unlock(L); return(status); }
public Parser(TokenReader tr) { tok = tr; }
public Parser(TokenReader tr) { reader = tr; }