Пример #1
0
 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();
 }
Пример #2
0
        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();
 }
Пример #4
0
 public SecondPass(Node n, ScopeManager mgr)
 {
     _mgr = mgr;
     _root = n;
 }
Пример #5
0
 private InternalType CheckSubTree(Node root)
 {
     _lastSeenType = null;
     root.Visit(this);
     return _lastSeenType;
 }
Пример #6
0
        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();
        }
Пример #7
0
 public string CheckNullPrint(Node n, int depth)
 {
     return (n != null) ? n.Print(depth) : string.Empty;
 }