コード例 #1
0
        public EnvFile ProcessFile(String name, String contents)
        {
            if (this.PathFiles.ContainsKey(name))
            {
                return(this.PathFiles[name]);
            }

            var file      = new EnvFile(name, contents);
            var tokenizer = new GLuaLexer(contents);
            var parser    = new GLuaParser(tokenizer, this);

            this.PathFiles[name]       = file;
            this.LexerFiles[tokenizer] = file;
            this.ParserFiles[parser]   = file;

            file.Successful = true;
            try
            {
                file.AST = parser.Parse( );
            }
            catch (Exception)
            {
                file.Successful = false;
                throw;
            }

            if (file.Successful)
            {
                foreach (IPriorityContainer module in this.Modules.Values.OrderBy(con => con.Priority))
                {
                    if (module is AnalyserEntry entryA)
                    {
                        entryA.Analyser.File = file;
                        entryA.Analyser.Analyse(file.AST);
                    }
                    else if (module is FolderEntry entryB)
                    {
                        entryB.Folder.File = file;
                        file.AST           = ( StatementList )entryB.Folder.Fold(file.AST);
                    }
                }

                foreach (Error err in file.Errors)
                {
                    if (err.Type == ErrorType.Error || err.Type == ErrorType.Fatal)
                    {
                        file.Successful = false;
                        break;
                    }
                }
            }

            return(file);
        }
コード例 #2
0
 public EnvFile GetFile(GLuaParser parser)
 => this.ParserFiles.ContainsKey(parser) ? this.ParserFiles[parser] : null;