示例#1
0
            public void HashFile(DMASTFile node)
            {
                var traveler = new TopLevelTraveler();

                traveler.VisitDefine = HashDefine;
                traveler.Travel(node);
            }
示例#2
0
        private static bool Compile(List <Token> preprocessedTokens)
        {
            DMLexer  dmLexer  = new DMLexer(null, preprocessedTokens);
            DMParser dmParser = new DMParser(dmLexer, !Settings.SuppressUnimplementedWarnings);

            VerbosePrint("Parsing");
            DMASTFile astFile = dmParser.File();

            if (dmParser.Warnings.Count > 0)
            {
                foreach (CompilerWarning warning in dmParser.Warnings)
                {
                    Warning(warning);
                }
            }

            if (dmParser.Errors.Count > 0)
            {
                foreach (CompilerError error in dmParser.Errors)
                {
                    Error(error);
                }
            }

            if (astFile == null)
            {
                return(false);
            }

            DMASTSimplifier astSimplifier = new DMASTSimplifier();

            VerbosePrint("Constant folding");
            astSimplifier.SimplifyAST(astFile);

            DMObjectBuilder dmObjectBuilder = new DMObjectBuilder();

            dmObjectBuilder.BuildObjectTree(astFile);

            if (ErrorCount > 0)
            {
                return(false);
            }

            return(true);
        }
示例#3
0
        public void BuildObjectTree(DMASTFile astFile)
        {
            DMObjectTree.Reset();
            ProcessFile(astFile);

            // TODO Nuke this pass
            foreach (DMObject dmObject in DMObjectTree.AllObjects)
            {
                dmObject.CreateInitializationProc();
            }

            foreach (DMProc proc in DMObjectTree.AllProcs)
            {
                proc.Compile();
            }

            DMObjectTree.CreateGlobalInitProc();
        }
示例#4
0
        public void BuildObjectTree(DMASTFile astFile)
        {
            DMObjectTree.Reset();
            ProcessFile(astFile);

            foreach (DMObject dmObject in DMObjectTree.AllObjects)
            {
                dmObject.CompileProcs();
            }

            DMObject root = DMObjectTree.GetDMObject(DreamPath.Root);

            foreach (DMProc gProc in DMObjectTree.GlobalProcs.Values)
            {
                gProc.Compile(root);
            }

            DMObjectTree.CreateGlobalInitProc();
        }
示例#5
0
        public void ProcessFile(DMASTFile file)
        {
            _currentObject = DMObjectTree.GetDMObject(DreamPath.Root);

            ProcessBlockInner(file.BlockInner);
        }
示例#6
0
 public void VisitFile(DMASTFile dmFile)
 {
     dmFile.BlockInner.Visit(this);
 }
示例#7
0
 public void Travel(DMASTFile root)
 {
     Travel(root.BlockInner);
 }