public static void Reset() { Process = null; ConstantData = null; GameBaseData = null; EMediator = null; VEvaluator = null; VariableData = null; Console = null; MainWindow = null; LabelDictionary = null; IdentifierDictionary = null; tempDic.Clear(); }
public bool Initialize() { LexicalAnalyzer.UseMacro = false; state = new ProcessState(console); originalState = state; initialiing = true; try { ParserMediator.Initialize(console); if (ParserMediator.HasWarning) { ParserMediator.FlushWarningList(); if (MessageBox.Show("コンフィグファイルに異常があります\nEmueraを終了しますか", "コンフィグエラー", MessageBoxButtons.YesNo) == DialogResult.Yes) { console.PrintSystemLine("コンフィグファイルに異常があり、終了が選択されたため処理を終了しました"); return(false); } } Content.AppContents.LoadContents(); if (Config.UseKeyMacro && !Program.AnalysisMode) { if (File.Exists(Program.ExeDir + "macro.txt")) { if (Config.DisplayReport) { console.PrintSystemLine("macro.txt読み込み中・・・"); } KeyMacro.LoadMacroFile(Program.ExeDir + "macro.txt"); } } if (Config.UseReplaceFile && !Program.AnalysisMode) { if (File.Exists(Program.CsvDir + "_Replace.csv")) { if (Config.DisplayReport) { console.PrintSystemLine("_Replace.csv読み込み中・・・"); } ConfigData.Instance.LoadReplaceFile(Program.CsvDir + "_Replace.csv"); if (ParserMediator.HasWarning) { ParserMediator.FlushWarningList(); if (MessageBox.Show("_Replace.csvに異常があります\nEmueraを終了しますか", "_Replace.csvエラー", MessageBoxButtons.YesNo) == DialogResult.Yes) { console.PrintSystemLine("_Replace.csvに異常があり、終了が選択されたため処理を終了しました"); return(false); } } } } Config.SetReplace(ConfigData.Instance); //ここでBARを設定すれば、いいことに気づいた予感 console.setStBar(Config.DrawLineString); if (Config.UseRenameFile) { if (File.Exists(Program.CsvDir + "_Rename.csv")) { if (Config.DisplayReport || Program.AnalysisMode) { console.PrintSystemLine("_Rename.csv読み込み中・・・"); } ParserMediator.LoadEraExRenameFile(Program.CsvDir + "_Rename.csv"); } else { console.PrintError("csv\\_Rename.csvが見つかりません"); } } if (!Config.DisplayReport) { console.PrintSingleLine(Config.LoadLabel); console.RefreshStrings(true); } gamebase = new GameBase(); if (!gamebase.LoadGameBaseCsv(Program.CsvDir + "GAMEBASE.CSV")) { console.PrintSystemLine("GAMEBASE.CSVの読み込み中に問題が発生したため処理を終了しました"); return(false); } console.SetWindowTitle(gamebase.ScriptWindowTitle); GlobalStatic.GameBaseData = gamebase; ConstantData constant = new ConstantData(gamebase); constant.LoadData(Program.CsvDir, console, Config.DisplayReport); GlobalStatic.ConstantData = constant; TrainName = constant.GetCsvNameList(VariableCode.TRAINNAME); vEvaluator = new VariableEvaluator(gamebase, constant); GlobalStatic.VEvaluator = vEvaluator; idDic = new IdentifierDictionary(vEvaluator.VariableData); GlobalStatic.IdentifierDictionary = idDic; StrForm.Initialize(); VariableParser.Initialize(); exm = new ExpressionMediator(this, vEvaluator, console); GlobalStatic.EMediator = exm; labelDic = new LabelDictionary(); GlobalStatic.LabelDictionary = labelDic; HeaderFileLoader hLoader = new HeaderFileLoader(console, idDic, this); LexicalAnalyzer.UseMacro = false; if (!hLoader.LoadHeaderFiles(Program.ErbDir, Config.DisplayReport)) { console.PrintSystemLine("ERHの読み込み中にエラーが発生したため処理を終了しました"); return(false); } LexicalAnalyzer.UseMacro = idDic.UseMacro(); ErbLoader loader = new ErbLoader(console, exm, this); if (Program.AnalysisMode) { noError = loader.loadErbs(Program.AnalysisFiles, labelDic); } else { noError = loader.LoadErbFiles(Program.ErbDir, Config.DisplayReport, labelDic); } initSystemProcess(); initialiing = false; } catch (Exception e) { handleException(e, null, true); console.PrintSystemLine("初期化中に致命的なエラーが発生したため処理を終了しました"); return(false); } if (labelDic == null) { return(false); } state.Begin(BeginType.TITLE); GC.Collect(); return(true); }
public bool Initialize() { LexicalAnalyzer.UseMacro = false; state = new ProcessState(console); originalState = state; initialiing = true; try { ParserMediator.Initialize(console); if (ParserMediator.HasWarning) { ParserMediator.FlushWarningList(); if (MessageBox.Show("コンフィグファイルに異常があります\nEmueraを終了しますか", "コンフィグエラー", MessageBoxButtons.YesNo) == DialogResult.Yes) { console.PrintLine("コンフィグファイルに異常があり、終了が選択されたため処理を終了しました"); return false; } } if (Config.UseKeyMacro && !Program.AnalysisMode) { if (File.Exists(Program.ExeDir + "macro.txt")) { if (Config.DisplayReport) console.PrintLine("macro.txt読み込み中・・・"); KeyMacro.LoadMacroFile(Program.ExeDir + "macro.txt"); } } if (Config.UseReplaceFile && !Program.AnalysisMode) { if (File.Exists(Program.CsvDir + "_Replace.csv")) { if (Config.DisplayReport) console.PrintLine("_Replace.csv読み込み中・・・"); ConfigData.Instance.LoadReplaceFile(Program.CsvDir + "_Replace.csv"); if (ParserMediator.HasWarning) { ParserMediator.FlushWarningList(); if (MessageBox.Show("_Replace.csvに異常があります\nEmueraを終了しますか", "_Replace.csvエラー", MessageBoxButtons.YesNo) == DialogResult.Yes) { console.PrintLine("_Replace.csvに異常があり、終了が選択されたため処理を終了しました"); return false; } } } } Config.SetReplace(ConfigData.Instance); //ここでBARを設定すれば、いいことに気づいた予感 console.setStBar(Config.DrawLineString); if (Config.UseRenameFile) { if (File.Exists(Program.CsvDir + "_Rename.csv")) { if (Config.DisplayReport || Program.AnalysisMode) console.PrintLine("_Rename.csv読み込み中・・・"); ParserMediator.LoadEraExRenameFile(Program.CsvDir + "_Rename.csv"); } else console.PrintError("csv\\_Rename.csvが見つかりません"); } if (!Config.DisplayReport) { console.PrintLine(Config.LoadLabel); console.RefreshStrings(true); } gamebase = new GameBase(); gamebase.LoadGameBaseCsv(Program.CsvDir + "GAMEBASE.CSV"); console.SetWindowTitle(gamebase.ScriptWindowTitle); GlobalStatic.GameBaseData = gamebase; ConstantData constant = new ConstantData(gamebase); constant.LoadData(Program.CsvDir, console, Config.DisplayReport); GlobalStatic.ConstantData = constant; TrainName = constant.GetCsvNameList(VariableCode.TRAINNAME); vEvaluator = new VariableEvaluator(gamebase, constant); GlobalStatic.VEvaluator = vEvaluator; idDic = new IdentifierDictionary(vEvaluator.VariableData); GlobalStatic.IdentifierDictionary = idDic; StrForm.Initialize(); VariableParser.Initialize(); exm = new ExpressionMediator(this, vEvaluator, console); GlobalStatic.EMediator = exm; labelDic = new LabelDictionary(); GlobalStatic.LabelDictionary = labelDic; HeaderFileLoader hLoader = new HeaderFileLoader(console, idDic, this); LexicalAnalyzer.UseMacro = false; if (!hLoader.LoadHeaderFiles(Program.ErbDir, Config.DisplayReport)) { console.PrintLine("ERHの読み込み中にエラーが発生したため処理を終了しました"); return false; } LexicalAnalyzer.UseMacro = idDic.UseMacro(); ErbLoader loader = new ErbLoader(console, exm, this); if (Program.AnalysisMode) noError = loader.loadErbs(Program.AnalysisFiles, labelDic); else noError = loader.LoadErbFiles(Program.ErbDir, Config.DisplayReport, labelDic); initSystemProcess(); initialiing = false; } catch (Exception e) { handleException(e, null, true); console.PrintLine("初期化中に致命的なエラーが発生したため処理を終了しました"); return false; } if (labelDic == null) { return false; } state.Begin(BeginType.TITLE); GC.Collect(); return true; }
/// <summary> /// 複数のファイルを読む /// </summary> /// <param name="filepath"></param> public bool LoadErbFiles(string erbDir, bool displayReport, LabelDictionary labelDictionary) { //1.713 labelDicをnewする位置を変更。 //checkScript();の時点でExpressionPerserがProcess.instance.LabelDicを必要とするから。 labelDic = labelDictionary; labelDic.Initialized = false; List<KeyValuePair<string, string>> erbFiles = Config.GetFiles(erbDir, "*.ERB"); List<string> isOnlyEvent = new List<string>(); noError = true; uint starttime = WinmmTimer.TickCount; try { labelDic.RemoveAll(); for (int i = 0; i < erbFiles.Count; i++) { string filename = erbFiles[i].Key; string file = erbFiles[i].Value; #if DEBUG if (displayReport) output.PrintLine("経過時間:" + (WinmmTimer.TickCount - starttime).ToString("D4") + "ms:" + filename + "読み込み中・・・"); #else if (displayReport) output.PrintLine(filename + "読み込み中・・・"); //output.PrintLine(filename + "読み込み中・・・"); #endif System.Windows.Forms.Application.DoEvents(); loadErb(file, filename, isOnlyEvent); } ParserMediator.FlushWarningList(); if (displayReport) output.PrintLine("ユーザー定義関数のリストを構築中・・・"); setLabelsArg(); ParserMediator.FlushWarningList(); labelDic.Initialized = true; if (displayReport) output.PrintLine("スクリプトの構文チェック中・・・"); checkScript(); ParserMediator.FlushWarningList(); //もう使わないのでnullにしちゃってGCで拾ってもらおうという魂胆 GlobalStatic.VEvaluator.Constant.DummyChara = null; if (displayReport) output.PrintLine("ロード完了"); } catch (Exception e) { ParserMediator.FlushWarningList(); System.Media.SystemSounds.Hand.Play(); output.PrintError("予期しないエラーが発生しました:" + Program.ExeName); output.PrintError(e.GetType().ToString() + ":" + e.Message); return false; } finally { parentProcess.scaningLine = null; } isOnlyEvent.Clear(); return noError; }
/// <summary> /// 指定されたファイルを読み込む /// </summary> /// <param name="filename"></param> public bool loadErbs(List<string> path, LabelDictionary labelDictionary) { string fname; List<string> isOnlyEvent = new List<string>(); noError = true; labelDic = labelDictionary; labelDic.Initialized = false; foreach (string fpath in path) { if (fpath.StartsWith(Program.ErbDir, Config.SCIgnoreCase) && !Program.AnalysisMode) fname = fpath.Substring(Program.ErbDir.Length); else fname = fpath; if (Program.AnalysisMode) output.PrintLine(fname + "読み込み中・・・"); System.Windows.Forms.Application.DoEvents(); loadErb(fpath, fname, isOnlyEvent); } if (Program.AnalysisMode) output.NewLine(); ParserMediator.FlushWarningList(); setLabelsArg(); ParserMediator.FlushWarningList(); labelDic.Initialized = true; checkScript(); ParserMediator.FlushWarningList(); parentProcess.scaningLine = null; isOnlyEvent.Clear(); return noError; }
public List<string> GetOverloadedList(LabelDictionary labelDic) { List<string> list = new List<string>(); foreach (KeyValuePair<string, FunctionMethod> pair in methodDic) { FunctionLabelLine func = labelDic.GetNonEventLabel(pair.Key); if (func == null) continue; if (!func.IsMethod) continue; list.Add(pair.Key); } return list; }
public IOperandTerm GetFunctionMethod(LabelDictionary labelDic, string codeStr, IOperandTerm[] arguments) { if (Config.ICFunction) codeStr = codeStr.ToUpper(); if ((labelDic != null) && (labelDic.Initialized)) { FunctionLabelLine func = labelDic.GetNonEventLabel(codeStr); if (func != null) { if (func.IsMethod) { CalledFunction call = CalledFunction.CreateCalledFunctionMethod(func, codeStr); string errMes; IOperandTerm ret = UserDefinedMethodTerm.Create(arguments, call, out errMes); if(ret == null) throw new CodeEE(errMes); return ret; } //1.721 #FUNCTIONが定義されていない関数は組み込み関数を上書きしない方向に。 PANCTION.ERBのRANDとか。 if (!methodDic.ContainsKey(codeStr)) throw new CodeEE("#FUNCTIONが定義されていない関数(" + func.Position.Filename + ":" + func.Position.LineNo + "行目)を式中で呼び出そうとしました"); } } FunctionMethod method = null; if (!methodDic.TryGetValue(codeStr, out method)) return null; string errmes = method.CheckArgumentType(codeStr, arguments); if (errmes != null) throw new CodeEE(errmes); return new FunctionMethodTerm(method, arguments); }
/// <summary> /// /// </summary> /// <param name="path"></param> /// <param name="labelDictionary"></param> /// <returns></returns> public bool LoadErbs(List <string> path, LabelDictionary labelDictionary) { throw new NotImplementedException(); }
/// <summary> /// /// </summary> /// <param name="erbDir"></param> /// <param name="displayReport"></param> /// <param name="labelDirectory"></param> /// <returns></returns> public bool LoadErbFiles(string erbDir, bool displayReport, LabelDictionary labelDirectory) { throw new NotImplementedException(); }