private static void GenerateIntermediateCode(string sourceFile, Node root) { var asmName = sourceFile.Substring(sourceFile.LastIndexOf("\\", StringComparison.Ordinal) + 1).Replace(".tn", ""); var cg = new CodeGenerator(asmName); cg.Generate(root); cg.WriteAssembly(); }
public FirstPass(Node treeNode, ScopeManager mgr) { _root = treeNode; _scopeMgr = mgr; var globalClass = new TypeClass("__global"); globalClass.Descriptor = _scopeMgr.AddClass(globalClass.ClassName, globalClass); //setup built in system methods foreach (var m in InternalMethodManager.Methods) { m.FuncInfo.Scope = _scopeMgr.TopScope; _scopeMgr.AddMethod(m.Name.ToLower(), m.FuncInfo, globalClass, null, true); } }
public void Generate(Node n) { n.Visit(this); _typeManager.CreateAllTypes(); }
public SecondPass(Node n, ScopeManager mgr) { _mgr = mgr; _root = n; }
private InternalType CheckSubTree(Node root) { _lastSeenType = null; root.Visit(this); return _lastSeenType; }
private static void RunSemanticPasses(Node root) { var mgr = new ScopeManager(); var first = new FirstPass(root, mgr); var second = new SecondPass(root, mgr); first.Run(); second.Run(); }
public string CheckNullPrint(Node n, int depth) { return (n != null) ? n.Print(depth) : string.Empty; }