コード例 #1
0
 public VariableStrArgTerm(VariableCode code, IOperandTerm strTerm, int index)
     : base(typeof(Int64))
 {
     this.strTerm = strTerm;
     parentCode = code;
     this.index = index;
 }
コード例 #2
0
 public VariableStrArgTerm(VariableCode code, IOperandTerm strTerm, int index)
     : base(typeof(long))
 {
     this.strTerm = strTerm;
     parentCode   = code;
     this.index   = index;
 }
コード例 #3
0
        public static VariableIdentifier GetVariableId(string key, string subStr)
        {
            VariableCode ret = VariableCode.__NULL__;

            if (string.IsNullOrEmpty(key))
            {
                return(null);
            }
            if (Config.ICVariable)
            {
                key = key.ToUpper();
            }
            if (subStr != null)
            {
                if (Config.ICFunction)
                {
                    subStr = subStr.ToUpper();
                }
                if (localvarNameDic.TryGetValue(key, out ret))
                {
                    return(new VariableIdentifier(ret, subStr));
                }
                if (nameDic.ContainsKey(key))
                {
                    throw new CodeEE("ローカル変数でない変数" + key + "に対して@が使われました");
                }
                throw new CodeEE("@の使い方が不正です");
            }
            nameDic.TryGetValue(key, out ret);
            return(new VariableIdentifier(ret));
        }
コード例 #4
0
 public LocalVariableToken(VariableCode varCode, VariableData varData, string subId, int size)
     : base(varCode, varData)
 {
     CanRestructure = false;
     this.subID = subId;
     this.size = size;
 }
コード例 #5
0
ファイル: ExpressionParser.cs プロジェクト: argent00/ezEmuera
        public static IOperandTerm ReduceVariableArgument(WordCollection wc, VariableCode varCode)
        {
            IOperandTerm ret = reduceTerm(wc, false, TermEndWith.EoL, varCode);

            if (ret == null)
            {
                throw new CodeEE("変数の:の後に引数がありません");
            }
            return(ret);
        }
コード例 #6
0
        public static List <VariableCode> GetExtSaveList(VariableCode flag)
        {
            VariableCode gFlag = flag &
                                 (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ | VariableCode.__ARRAY_3D__ | VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__ | VariableCode.__INTEGER__);

            if (!extSaveListDic.ContainsKey(gFlag))
            {
                return(new List <VariableCode>());
            }
            return(extSaveListDic[gFlag]);
        }
コード例 #7
0
        public static List <VariableCode> GetExtSaveList(VariableCode flag)
        {
            VariableCode gFlag = flag &
                                 (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ | VariableCode.__ARRAY_3D__ | VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__ | VariableCode.__INTEGER__);

            if (!extSaveListDic.TryGetValue(gFlag, out var var_code_list))
            {
                return(new List <VariableCode>());
            }
            return(var_code_list);
        }
コード例 #8
0
        private List <VariableCode> ExtractVariables(string line)
        {
            VariableCode variable = GetVariable(line);

            if (variable != null)
            {
                return(new List <VariableCode> {
                    variable
                });
            }
            return(allVariables.Where(x => Regex.IsMatch(" " + line + " ", @"[ ,=><)(]" + x.Name + @"[ ,\.\?=><)(]")).ToList());
        }
コード例 #9
0
ファイル: CharacterData.cs プロジェクト: xerysherry/uEmuera
        public static int[] CharacterVarLength(VariableCode code, ConstantData constant)
        {
            int[]        ret  = null;
            VariableCode type = code & (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ |
                                        VariableCode.__ARRAY_3D__ | VariableCode.__INTEGER__ | VariableCode.__STRING__);
            int i = (int)(code & VariableCode.__LOWERCASE__);

            if (i >= 0xF0)
            {
                return(null);
            }
            Int64 length64 = 0;

            switch (type)
            {
            case VariableCode.__STRING__:
            case VariableCode.__INTEGER__:
                ret = new int[0];
                break;

            case VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
                ret    = new int[1];
                ret[0] = constant.CharacterIntArrayLength[i];
                break;

            case VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
                ret    = new int[1];
                ret[0] = constant.CharacterStrArrayLength[i];
                break;

            case VariableCode.__INTEGER__ | VariableCode.__ARRAY_2D__:
                ret      = new int[2];
                length64 = constant.CharacterIntArray2DLength[i];
                ret[0]   = (int)(length64 >> 32);
                ret[1]   = (int)(length64 & 0x7FFFFFFF);
                break;

            case VariableCode.__STRING__ | VariableCode.__ARRAY_2D__:
                ret      = new int[2];
                length64 = constant.CharacterStrArray2DLength[i];
                ret[0]   = (int)(length64 >> 32);
                ret[1]   = (int)(length64 & 0x7FFFFFFF);
                break;

            case VariableCode.__INTEGER__ | VariableCode.__ARRAY_3D__:
                throw new NotImplCodeEE();

            case VariableCode.__STRING__ | VariableCode.__ARRAY_3D__:
                throw new NotImplCodeEE();
            }
            return(ret);
        }
コード例 #10
0
        private void WriteAssign(StringWriter writer, AssignCode assign, int tabs)
        {
            VariableCode variable = fieldManager.GetVariable(assign.To);
            string       text     = $"{assign.To} = {assign.Value};";

            if (variable != null)
            {
                if (!variable.WasInitialized)
                {
                    text = $"{variable.Type} {assign.To} = {assign.Value};";
                    variable.WasInitialized = true;
                }
            }
            writer.WriteLineTabs(text, tabs);
        }
コード例 #11
0
 private VariableIdentifier(VariableCode code)
 {
     this.code = code;
 }
コード例 #12
0
ファイル: ConstantData.cs プロジェクト: utau1116b/Hello-World
 public int KeywordToInteger(VariableCode code, string key, int index)
 {
     if (string.IsNullOrEmpty(key))
         throw new CodeEE("キーワードを空には出来ません");
     int ret = -1;
     string errPos;
     Dictionary<string, int> dic = GetKeywordDictionary(out errPos, code, index);
     if (dic.TryGetValue(key, out ret))
         return ret;
     if (errPos == null)
         throw new CodeEE("配列変数" + code.ToString() + "の要素を文字列で指定することはできません");
     else
         throw new CodeEE(errPos + "の中に\"" + key + "\"の定義がありません");
 }
コード例 #13
0
ファイル: ConstantData.cs プロジェクト: utau1116b/Hello-World
        public Dictionary<string, int> GetKeywordDictionary(out string errPos, VariableCode code, int index)
        {
            errPos = null;
            int allowIndex = -1;
            Dictionary<string, int> ret = null;
            switch (code)
            {
                case VariableCode.ABL:
                    ret = nameToIntDics[ablIndex];//AblName;
                    errPos = "abl.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.EXP:
                    ret = nameToIntDics[expIndex];//ExpName;
                    errPos = "exp.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.TALENT:
                    ret = nameToIntDics[talentIndex];//TalentName;
                    errPos = "talent.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.UP:
                case VariableCode.DOWN:
                    ret = nameToIntDics[paramIndex];//ParamName 1;
                    errPos = "palam.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.PALAM:
                case VariableCode.JUEL:
                case VariableCode.GOTJUEL:
                case VariableCode.CUP:
                case VariableCode.CDOWN:
                    ret = nameToIntDics[paramIndex];//ParamName 2;
                    errPos = "palam.csv";
                    allowIndex = 1;
                    break;

                case VariableCode.TRAINNAME:
                    ret = nameToIntDics[trainIndex];//TrainName;
                    errPos = "train.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.MARK:
                    ret = nameToIntDics[markIndex];//MarkName;
                    errPos = "mark.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.ITEM:
                case VariableCode.ITEMSALES:
                case VariableCode.ITEMPRICE:
                    ret = nameToIntDics[itemIndex];//ItemName;
                    errPos = "Item.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.LOSEBASE:
                    ret = nameToIntDics[baseIndex];//BaseName;
                    errPos = "base.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.BASE:
                case VariableCode.MAXBASE:
                case VariableCode.DOWNBASE:
                    ret = nameToIntDics[baseIndex];//BaseName;
                    errPos = "base.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.SOURCE:
                    ret = nameToIntDics[sourceIndex];//SourceName;
                    errPos = "source.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.EX:
                case VariableCode.NOWEX:
                    ret = nameToIntDics[exIndex];//ExName;
                    errPos = "ex.csv";
                    allowIndex = 1;
                    break;

                case VariableCode.EQUIP:
                    ret = nameToIntDics[equipIndex];//EquipName;
                    errPos = "equip.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.TEQUIP:
                    ret = nameToIntDics[tequipIndex];//TequipName;
                    errPos = "tequip.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.FLAG:
                    ret = nameToIntDics[flagIndex];//FlagName;
                    errPos = "flag.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.TFLAG:
                    ret = nameToIntDics[tflagIndex];//TFlagName;
                    errPos = "tflag.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.CFLAG:
                    ret = nameToIntDics[cflagIndex];//CFlagName;
                    errPos = "cflag.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.TCVAR:
                    ret = nameToIntDics[tcvarIndex];//TCVarName;
                    errPos = "tcvar.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.CSTR:
                    ret = nameToIntDics[cstrIndex];//CStrName;
                    errPos = "cstr.csv";
                    allowIndex = 1;
                    break;

                case VariableCode.STAIN:
                    ret = nameToIntDics[stainIndex];//StainName;
                    errPos = "stain.csv";
                    allowIndex = 1;
                    break;
                case VariableCode.CDFLAGNAME1:
                    ret = nameToIntDics[cdflag1Index];
                    errPos = "cdflag1.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.CDFLAGNAME2:
                    ret = nameToIntDics[cdflag2Index];
                    errPos = "cdflag2.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.CDFLAG:
                    {
                        if (index == 1)
                        {
                            ret = nameToIntDics[cdflag1Index];//CDFlagName1
                            errPos = "cdflag1.csv";
                        }
                        else if (index == 2)
                        {
                            ret = nameToIntDics[cdflag2Index];//CDFlagName2
                            errPos = "cdflag2.csv";
                        }
                        else if (index >= 0)
                            throw new CodeEE("配列変数" + code.ToString() + "の" + (index + 1).ToString() + "番目の要素を文字列で指定することはできません");
                        else
                            throw new CodeEE("CDFLAGの要素の取得にはCDFLAGNAME1又はCDFLAGNAME2を使用します");
                        return ret;
                    }
                case VariableCode.STR:
                    ret = nameToIntDics[strnameIndex];
                    errPos = "strname.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.TSTR:
                    ret = nameToIntDics[tstrnameIndex];
                    errPos = "tstr.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.SAVESTR:
                    ret = nameToIntDics[savestrnameIndex];
                    errPos = "savestr.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.GLOBAL:
                    ret = nameToIntDics[globalIndex];
                    errPos = "global.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.GLOBALS:
                    ret = nameToIntDics[globalsIndex];
                    errPos = "globals.csv";
                    allowIndex = 0;
                    break;
                case VariableCode.RELATION:
                    ret = relationDic;
                    errPos = "chara*.csv";
                    allowIndex = 1;
                    break;

            }
            if (index < 0)
                return ret;
            if (ret == null)
                throw new CodeEE("配列変数" + code.ToString() + "の要素を文字列で指定することはできません");
            if ((index != allowIndex))
                throw new CodeEE("配列変数" + code.ToString() + "の" + (index + 1).ToString() + "番目の要素を文字列で指定することはできません");
            return ret;
        }
コード例 #14
0
ファイル: ConstantData.cs プロジェクト: utau1116b/Hello-World
 private void _decideActualArraySize_sub(VariableCode mainCode, VariableCode nameCode, int[] arraylength, ScriptPosition position)
 {
     int nameIndex = (int)(nameCode & VariableCode.__LOWERCASE__);
     int mainLengthIndex = (int)(mainCode & VariableCode.__LOWERCASE__);
     if (changedCode.Contains(nameCode) && changedCode.Contains(mainCode))
     {
         if (MaxDataList[nameIndex] != arraylength[mainLengthIndex])
         {
             int i = Math.Max(MaxDataList[nameIndex], arraylength[mainLengthIndex]);
             arraylength[mainLengthIndex] = i;
             MaxDataList[nameIndex] = i;
             //1803beta004 不適切な指定として警告Lv1の対象にする
             ParserMediator.Warn(mainCode.ToString() + "と" + nameCode.ToString() + "の要素数が異なります(大きい方に合わせます)", position, 1);
         }
     }
     else if (changedCode.Contains(nameCode) && !changedCode.Contains(mainCode))
         arraylength[mainLengthIndex] = MaxDataList[nameIndex];
     else if (!changedCode.Contains(nameCode) && changedCode.Contains(mainCode))
         MaxDataList[nameIndex] = arraylength[mainLengthIndex];
 }
コード例 #15
0
 private VariableIdentifier(VariableCode code, string scope)
 {
     Code  = code;
     Scope = scope;
 }
コード例 #16
0
ファイル: CharacterData.cs プロジェクト: xerysherry/uEmuera
        public void SaveToStreamBinary(EraBinaryDataWriter writer, VariableData varData)
        {
            //eramaker変数の保存
            foreach (KeyValuePair <string, VariableToken> pair in varData.GetVarTokenDic())
            {
                VariableToken var = pair.Value;
                if (!var.IsSavedata || !var.IsCharacterData || var.IsGlobal)
                {
                    continue;
                }
                VariableCode code    = var.Code;
                VariableCode flag    = code & (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ | VariableCode.__ARRAY_3D__ | VariableCode.__STRING__ | VariableCode.__INTEGER__);
                int          CodeInt = var.CodeInt;
                switch (flag)
                {
                case VariableCode.__INTEGER__:
                    writer.WriteWithKey(code.ToString(), dataInteger[CodeInt]);
                    break;

                case VariableCode.__STRING__:
                    writer.WriteWithKey(code.ToString(), dataString[CodeInt]);
                    break;

                case VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
                    writer.WriteWithKey(code.ToString(), dataIntegerArray[CodeInt]);
                    break;

                case VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
                    writer.WriteWithKey(code.ToString(), dataStringArray[CodeInt]);
                    break;

                case VariableCode.__INTEGER__ | VariableCode.__ARRAY_2D__:
                    writer.WriteWithKey(code.ToString(), dataIntegerArray2D[CodeInt]);
                    break;

                case VariableCode.__STRING__ | VariableCode.__ARRAY_2D__:
                    writer.WriteWithKey(code.ToString(), dataStringArray2D[CodeInt]);
                    break;
                    //case VariableCode.__INTEGER__ | VariableCode.__ARRAY_3D__:
                    //    writer.Write(code.ToString(), dataIntegerArray3D[CodeInt]);
                    //    break;
                    //case VariableCode.__STRING__ | VariableCode.__ARRAY_3D__:
                    //    writer.Write(code.ToString(), dataStringArray3D[CodeInt]);
                    //    break;
                }
            }

            //1813追加
            if (UserDefCVarDataList.Count != 0)
            {
                writer.WriteSeparator();
                //#DIM宣言変数の保存
                foreach (UserDefinedCharaVariableToken var in varData.UserDefinedCharaVarList)
                {
                    if (!var.IsSavedata || !var.IsCharacterData || var.IsGlobal)
                    {
                        continue;
                    }
                    writer.WriteWithKey(var.Name, UserDefCVarDataList[var.ArrayIndex]);
                }
            }

            writer.WriteEOC();
        }
コード例 #17
0
        protected VariableToken(VariableCode varCode, VariableData varData)
        {
            Code = varCode;
            VariableType = ((varCode & VariableCode.__INTEGER__) == VariableCode.__INTEGER__) ? typeof(Int64) : typeof(string);
            VarCodeInt = (int)(varCode & VariableCode.__LOWERCASE__);
            varName = varCode.ToString();
            this.varData = varData;
            IsPrivate = false;
            IsReference = false;
            Dimension = 0;
            IsGlobal = (Code == VariableCode.GLOBAL) || (Code == VariableCode.GLOBALS);
            if ((Code & VariableCode.__ARRAY_1D__) == VariableCode.__ARRAY_1D__)
                Dimension = 1;
            if ((Code & VariableCode.__ARRAY_2D__) == VariableCode.__ARRAY_2D__)
                Dimension = 2;
            if ((Code & VariableCode.__ARRAY_3D__) == VariableCode.__ARRAY_3D__)
                Dimension = 3;

            IsSavedata = false;
            if ((Code == VariableCode.GLOBAL) || (Code == VariableCode.GLOBALS))
                IsSavedata = true;
            else if ((Code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__)
            {
                IsSavedata = true;
            }
            else if (((Code & VariableCode.__EXTENDED__) != VariableCode.__EXTENDED__)
                && ((Code & VariableCode.__CALC__) != VariableCode.__CALC__)
                && ((Code & VariableCode.__UNCHANGEABLE__) != VariableCode.__UNCHANGEABLE__)
                && ((Code & VariableCode.__LOCAL__) != VariableCode.__LOCAL__)
                && (!varName.StartsWith("NOTUSE_")))
            {
                VariableCode flag = Code & (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ | VariableCode.__ARRAY_3D__ | VariableCode.__STRING__ | VariableCode.__INTEGER__ | VariableCode.__CHARACTER_DATA__);
                switch (flag)
                {
                    case VariableCode.__CHARACTER_DATA__ | VariableCode.__INTEGER__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_INTEGER__)
                            IsSavedata = true;
                        break;
                    case VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_STRING__)
                            IsSavedata = true;
                        break;
                    case VariableCode.__CHARACTER_DATA__ | VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_INTEGER_ARRAY__)
                            IsSavedata = true;
                        break;
                    case VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_STRING_ARRAY__)
                            IsSavedata = true;
                        break;
                    case VariableCode.__INTEGER__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_INTEGER__)
                            IsSavedata = true;
                        break;
                    case VariableCode.__STRING__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_STRING__)
                            IsSavedata = true;
                        break;
                    case VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_INTEGER_ARRAY__)
                            IsSavedata = true;
                        break;
                    case VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
                        if (VarCodeInt < (int)VariableCode.__COUNT_SAVE_STRING_ARRAY__)
                            IsSavedata = true;
                        break;
                }
            }
        }
コード例 #18
0
 public __INT_MIN__Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = true;
 }
コード例 #19
0
 public WINDOW_TITLE_Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = false;
 }
コード例 #20
0
 public StrVariableToken(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = false;
     array = varData.DataString;
 }
コード例 #21
0
 public StrConstantToken(VariableCode varCode, VariableData varData, string s)
     : base(varCode, varData)
 {
     this.s = s;
 }
コード例 #22
0
 public Str1DConstantToken(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     this.array = varData.constant.GetCsvNameList(varCode);
 }
コード例 #23
0
 private VariableIdentifier(VariableCode code, string scope)
 {
     this.code = code; this.scope = scope;
 }
コード例 #24
0
 public static VariableIdentifier GetVariableId(VariableCode code)
 {
     return(new VariableIdentifier(code));
 }
コード例 #25
0
 public CHARANUM_Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
 }
コード例 #26
0
 public Str1DConstantToken(VariableCode varCode, VariableData varData, string[] array)
     : base(varCode, varData)
 {
     this.array = array;
 }
コード例 #27
0
 public CharaStrVariableToken(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = false;
 }
コード例 #28
0
 protected UserDefinedVariableToken(VariableCode varCode, UserDefinedVariableData data)
     : base(varCode, null)
 {
     varName = data.Name;
     IsPrivate = data.Private;
     this.sizes = data.Lengths;
     this.IsGlobal = data.Global;
     this.IsSavedata = data.Save;
     //Dimension = sizes.Length;
     totalSize = 1;
     for (int i = 0; i < sizes.Length; i++)
         totalSize *= sizes[i];
 }
コード例 #29
0
 public CompatiRandToken(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
 }
コード例 #30
0
 public MONEYLABEL_Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = true;
 }
コード例 #31
0
 public ConstantToken(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = true;
 }
コード例 #32
0
ファイル: ConstantData.cs プロジェクト: utau1116b/Hello-World
 public string[] GetCsvNameList(VariableCode code)
 {
     return names[(int)(code & VariableCode.__LOWERCASE__)];
 }
コード例 #33
0
 public Debug__LINE__Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = true;
 }
コード例 #34
0
ファイル: ConstantData.cs プロジェクト: utau1116b/Hello-World
 public bool isDefined(VariableCode varCode, string str)
 {
     if (string.IsNullOrEmpty(str))
         return false;
     string errPos = null;
     Dictionary<string, int> dic = null;
     if (varCode == VariableCode.CDFLAG)
     {
         dic = GetKeywordDictionary(out errPos, VariableCode.CDFLAGNAME1, -1);
         if ((dic == null) || (!dic.ContainsKey(str)))
             dic = GetKeywordDictionary(out errPos, VariableCode.CDFLAGNAME2, -1);
         if (dic == null)
             return false;
         return dic.ContainsKey(str);
     }
     dic = GetKeywordDictionary(out errPos, varCode, -1);
     if (dic == null)
         return false;
     return dic.ContainsKey(str);
 }
コード例 #35
0
 public DRAWLINESTR_Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = true;
 }
コード例 #36
0
 public LocalStr1DVariableToken(VariableCode varCode, VariableData varData, string subId, int size)
     : base(varCode, varData, subId, size)
 {
 }
コード例 #37
0
ファイル: ExpressionParser.cs プロジェクト: argent00/ezEmuera
        /// <summary>
        /// 識別子一つを解決
        /// </summary>
        /// <param name="wc"></param>
        /// <param name="idStr">識別子文字列</param>
        /// <param name="varCode">変数の引数の場合はその変数のCode。連想配列的につかう</param>
        /// <returns></returns>
        private static IOperandTerm reduceIdentifier(WordCollection wc, string idStr, VariableCode varCode)
        {
            wc.ShiftNext();
            SymbolWord symbol = wc.Current as SymbolWord;

            if (symbol != null && symbol.Type == '.')
            {            //名前空間
                throw new NotImplCodeEE();
            }
            else if (symbol != null && (symbol.Type == '(' || symbol.Type == '['))
            {                           //関数
                wc.ShiftNext();
                if (symbol.Type == '[') //1810 多分永久に実装されない
                {
                    throw new CodeEE("[]を使った機能はまだ実装されていません");
                }
                //引数を処理
                IOperandTerm[] args   = ReduceArguments(wc, ArgsEndWith.RightParenthesis, false);
                IOperandTerm   mToken = GlobalStatic.IdentifierDictionary.GetFunctionMethod(GlobalStatic.LabelDictionary, idStr, args, false);
                if (mToken == null)
                {
                    if (!Program.AnalysisMode)
                    {
                        GlobalStatic.IdentifierDictionary.ThrowException(idStr, true);
                    }
                    else
                    {
                        if (GlobalStatic.tempDic.ContainsKey(idStr))
                        {
                            GlobalStatic.tempDic[idStr]++;
                        }
                        else
                        {
                            GlobalStatic.tempDic.Add(idStr, 1);
                        }
                        return(new NullTerm(0));
                    }
                }
                return(mToken);
            }
            else
            {                                             //変数 or キーワード
                VariableToken id = ReduceVariableIdentifier(wc, idStr);
                if (id != null)                           //idStrが変数名の場合、
                {
                    if (varCode != VariableCode.__NULL__) //変数の引数が引数を持つことはない
                    {
                        return(VariableParser.ReduceVariable(id, null, null, null));
                    }
                    else
                    {
                        return(VariableParser.ReduceVariable(id, wc));
                    }
                }
                //idStrが変数名でない場合、
                IOperandTerm refToken = GlobalStatic.IdentifierDictionary.GetFunctionMethod(GlobalStatic.LabelDictionary, idStr, null, false);
                if (refToken != null)                //関数参照と名前が一致したらそれを返す。実際に使うとエラー
                {
                    return(refToken);
                }
                if (varCode != VariableCode.__NULL__ && GlobalStatic.ConstantData.isDefined(varCode, idStr))                //連想配列的な可能性アリ
                {
                    return(new SingleTerm(idStr));
                }
                GlobalStatic.IdentifierDictionary.ThrowException(idStr, false);
            }
            throw new ExeEE("エラー投げ損ねた");            //ここまででthrowかreturnのどちらかをするはず。
        }
コード例 #38
0
        static VariableIdentifier()
        {
            Array array = Enum.GetValues(typeof(VariableCode));

            nameDic.Add(VariableCode.__FILE__.ToString(), VariableCode.__FILE__);
            nameDic.Add(VariableCode.__LINE__.ToString(), VariableCode.__LINE__);
            nameDic.Add(VariableCode.__FUNCTION__.ToString(), VariableCode.__FUNCTION__);
            foreach (object name in array)
            {
                VariableCode code = (VariableCode)name;
                string       key  = code.ToString();
                if ((key == null) || (key.StartsWith("__") && key.EndsWith("__")))
                {
                    continue;
                }
                if (Config.ICVariable)
                {
                    key = key.ToUpper();
                }
                if (nameDic.ContainsKey(key))
                {
                    continue;
                }
#if UEMUERA_DEBUG
                if ((code & VariableCode.__ARRAY_2D__) == VariableCode.__ARRAY_2D__)
                {
                    if ((code & VariableCode.__ARRAY_1D__) == VariableCode.__ARRAY_1D__)
                    {
                        throw new ExeEE("ARRAY2DとARRAY1Dは排他");
                    }
                }
                if (((code & VariableCode.__INTEGER__) != VariableCode.__INTEGER__) &&
                    ((code & VariableCode.__STRING__) != VariableCode.__STRING__))
                {
                    throw new ExeEE("INTEGERとSTRINGのどちらかは必須");
                }
                if (((code & VariableCode.__INTEGER__) == VariableCode.__INTEGER__) &&
                    ((code & VariableCode.__STRING__) == VariableCode.__STRING__))
                {
                    throw new ExeEE("INTEGERとSTRINGは排他");
                }
                if ((code & VariableCode.__EXTENDED__) != VariableCode.__EXTENDED__)
                {
                    if ((code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__)
                    {
                        throw new ExeEE("SAVE_EXTENDEDにはEXTENDEDフラグ必須");
                    }
                    if ((code & VariableCode.__LOCAL__) == VariableCode.__LOCAL__)
                    {
                        throw new ExeEE("LOCALにはEXTENDEDフラグ必須");
                    }
                    if ((code & VariableCode.__GLOBAL__) == VariableCode.__GLOBAL__)
                    {
                        throw new ExeEE("GLOBALにはEXTENDEDフラグ必須");
                    }
                    if ((code & VariableCode.__ARRAY_2D__) == VariableCode.__ARRAY_2D__)
                    {
                        throw new ExeEE("ARRAY2DにはEXTENDEDフラグ必須");
                    }
                }
                if (((code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__) &&
                    ((code & VariableCode.__UNCHANGEABLE__) == VariableCode.__UNCHANGEABLE__))
                {
                    throw new ExeEE("CALCとSAVE_EXTENDEDは排他");
                }
                if (((code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__) &&
                    ((code & VariableCode.__CALC__) == VariableCode.__CALC__))
                {
                    throw new ExeEE("UNCHANGEABLEとSAVE_EXTENDEDは排他");
                }
                if (((code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__) &&
                    ((code & VariableCode.__ARRAY_2D__) == VariableCode.__ARRAY_2D__) &&
                    ((code & VariableCode.__STRING__) == VariableCode.__STRING__))
                {
                    throw new ExeEE("STRINGかつARRAY2DのSAVE_EXTENDEDは未実装");
                }
#endif
                nameDic.Add(key, code);
                ////セーブが必要な変数リストの作成

                ////__SAVE_EXTENDED__フラグ持ち
                //if ((code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__)
                //{
                //    if ((code & VariableCode.__CHARACTER_DATA__) == VariableCode.__CHARACTER_DATA__)
                //        charaSaveDataList.Add(code);
                //    else
                //        saveDataList.Add(code);
                //}
                //else if ( ((code & VariableCode.__EXTENDED__) != VariableCode.__EXTENDED__)
                //    && ((code & VariableCode.__CALC__) != VariableCode.__CALC__)
                //    && ((code & VariableCode.__UNCHANGEABLE__) != VariableCode.__UNCHANGEABLE__)
                //    && ((code & VariableCode.__LOCAL__) != VariableCode.__LOCAL__)
                //    && (!key.StartsWith("NOTUSE_")) )
                //{//eramaker由来の変数でセーブするもの

                //    VariableCode flag = code & (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ | VariableCode.__ARRAY_3D__ | VariableCode.__STRING__ | VariableCode.__INTEGER__ | VariableCode.__CHARACTER_DATA__);
                //    int codeInt = (int)VariableCode.__LOWERCASE__ & (int)code;
                //    switch (flag)
                //    {
                //        case VariableCode.__CHARACTER_DATA__ | VariableCode.__INTEGER__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_INTEGER__)
                //                charaSaveDataList.Add(code);
                //            break;
                //        case VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_STRING__)
                //                charaSaveDataList.Add(code);
                //            break;
                //        case VariableCode.__CHARACTER_DATA__ | VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_INTEGER_ARRAY__)
                //                charaSaveDataList.Add(code);
                //            break;
                //        case VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_CHARACTER_STRING_ARRAY__)
                //                charaSaveDataList.Add(code);
                //            break;
                //        case VariableCode.__INTEGER__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_INTEGER__)
                //                saveDataList.Add(code);
                //            break;
                //        case VariableCode.__STRING__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_STRING__)
                //                saveDataList.Add(code);
                //            break;
                //        case VariableCode.__INTEGER__ | VariableCode.__ARRAY_1D__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_INTEGER_ARRAY__)
                //                saveDataList.Add(code);
                //            break;
                //        case VariableCode.__STRING__ | VariableCode.__ARRAY_1D__:
                //            if (codeInt < (int)VariableCode.__COUNT_SAVE_STRING_ARRAY__)
                //                saveDataList.Add(code);
                //            break;
                //    }
                //}


                if ((code & VariableCode.__LOCAL__) == VariableCode.__LOCAL__)
                {
                    localvarNameDic.Add(key, code);
                }
                if ((code & VariableCode.__SAVE_EXTENDED__) == VariableCode.__SAVE_EXTENDED__)
                {
                    VariableCode flag = code &
                                        (VariableCode.__ARRAY_1D__ | VariableCode.__ARRAY_2D__ | VariableCode.__ARRAY_3D__ | VariableCode.__CHARACTER_DATA__ | VariableCode.__STRING__ | VariableCode.__INTEGER__);

                    if (!extSaveListDic.TryGetValue(flag, out var var_code_list))
                    {
                        var_code_list = new List <VariableCode>();
                        extSaveListDic.Add(flag, var_code_list);
                    }
                    var_code_list.Add(code);
                }
            }
        }
コード例 #39
0
 public LASTLOAD_TEXT_Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
 }
コード例 #40
0
 public LINECOUNT_Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
 }
コード例 #41
0
 public Int1DConstantToken(VariableCode varCode, VariableData varData, Int64[] array)
     : base(varCode, varData)
 {
     this.array = array;
 }
コード例 #42
0
 public LASTLOAD_VERSION_Token(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
 }
コード例 #43
0
ファイル: VariableLocal.cs プロジェクト: argent00/ezEmuera
 public VariableLocal(VariableCode varCode, int size, CreateLocalVariableToken creater)
 {
     this.size    = size;
     this.varCode = varCode;
     this.creater = creater;
 }
コード例 #44
0
 protected ReferenceToken(VariableCode varCode, UserDefinedVariableData data)
     : base(varCode, data)
 {
     CanRestructure = false;
     IsStatic = !data.Private;
     IsReference = true;
     arrayList = new List<Array>();
 }
コード例 #45
0
 protected PseudoVariableToken(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = false;
 }
コード例 #46
0
ファイル: ExpressionParser.cs プロジェクト: argent00/ezEmuera
        /// <summary>
        /// 解析器の本体
        /// </summary>
        /// <param name="wc"></param>
        /// <param name="allowKeywordTo">TOキーワードが見つかっても良いか</param>
        /// <param name="endWith">終端記号</param>
        /// <returns></returns>
        private static IOperandTerm reduceTerm(WordCollection wc, bool allowKeywordTo, TermEndWith endWith, VariableCode varCode)
        {
            TermStack stack = new TermStack();
            //int termCount = 0;
            int          ternaryCount = 0;
            OperatorCode formerOp     = OperatorCode.NULL;
            bool         varArg       = varCode != VariableCode.__NULL__;

            do
            {
                Word token = wc.Current;
                switch (token.Type)
                {
                case '\0':
                    goto end;

                case '"':                        //LiteralStringWT
                    stack.Add(((LiteralStringWord)token).Str);
                    break;

                case '0':                        //LiteralIntegerWT
                    stack.Add(((LiteralIntegerWord)token).Int);
                    break;

                case 'F':                        //FormattedStringWT
                    stack.Add(ToStrFormTerm((StrFormWord)token));
                    break;

                case 'A':                        //IdentifierWT
                {
                    string idStr = (((IdentifierWord)token).Code);
                    if (idStr.Equals("TO", Config.SCVariable))
                    {
                        if (allowKeywordTo)
                        {
                            goto end;
                        }
                        else
                        {
                            throw new CodeEE("TOキーワードはここでは使用できません");
                        }
                    }
                    else if (idStr.Equals("IS", Config.SCVariable))
                    {
                        throw new CodeEE("ISキーワードはここでは使用できません");
                    }
                    stack.Add(reduceIdentifier(wc, idStr, varCode));
                    continue;
                }

                case '=':                        //OperatorWT
                {
                    if (varArg)
                    {
                        throw new CodeEE("変数の引数の読み取り中に予期しない演算子を発見しました");
                    }
                    OperatorCode op = ((OperatorWord)token).Code;
                    if (op == OperatorCode.Assignment)
                    {
                        if ((endWith & TermEndWith.Assignment) == TermEndWith.Assignment)
                        {
                            goto end;
                        }
                        throw new CodeEE("式中で代入演算子'='が使われています(等価比較には'=='を使用してください)");
                    }

                    if (formerOp == OperatorCode.Equal || formerOp == OperatorCode.Greater || formerOp == OperatorCode.Less ||
                        formerOp == OperatorCode.GreaterEqual || formerOp == OperatorCode.LessEqual || formerOp == OperatorCode.NotEqual)
                    {
                        if (op == OperatorCode.Equal || op == OperatorCode.Greater || op == OperatorCode.Less ||
                            op == OperatorCode.GreaterEqual || op == OperatorCode.LessEqual || op == OperatorCode.NotEqual)
                        {
                            ParserMediator.Warn("(構文上の注意)比較演算子が連続しています。", GlobalStatic.Process.GetScaningLine(), 0, false, false);
                        }
                    }
                    stack.Add(op);
                    formerOp = op;
                    if (op == OperatorCode.Ternary_a)
                    {
                        ternaryCount++;
                    }
                    else if (op == OperatorCode.Ternary_b)
                    {
                        if (ternaryCount > 0)
                        {
                            ternaryCount--;
                        }
                        else
                        {
                            throw new CodeEE("対応する'?'のない'#'です");
                        }
                    }
                    break;
                }

                case '(':
                    wc.ShiftNext();
                    IOperandTerm inTerm = reduceTerm(wc, false, TermEndWith.RightParenthesis, VariableCode.__NULL__);
                    if (inTerm == null)
                    {
                        throw new CodeEE("かっこ\"(\"~\")\"の中に式が含まれていません");
                    }
                    stack.Add(inTerm);
                    if (wc.Current.Type != ')')
                    {
                        throw new CodeEE("対応する')'のない'('です");
                    }
                    //termCount++;
                    wc.ShiftNext();
                    continue;

                case ')':
                    if ((endWith & TermEndWith.RightParenthesis) == TermEndWith.RightParenthesis)
                    {
                        goto end;
                    }
                    throw new CodeEE("構文解釈中に予期しない記号'" + token.Type + "'を発見しました");

                case ']':
                    if ((endWith & TermEndWith.RightBracket) == TermEndWith.RightBracket)
                    {
                        goto end;
                    }
                    throw new CodeEE("構文解釈中に予期しない記号'" + token.Type + "'を発見しました");

                case ',':
                    if ((endWith & TermEndWith.Comma) == TermEndWith.Comma)
                    {
                        goto end;
                    }
                    throw new CodeEE("構文解釈中に予期しない記号'" + token.Type + "'を発見しました");

                case 'M':
                    throw new ExeEE("マクロ解決失敗");

                default:
                    throw new CodeEE("構文解釈中に予期しない記号'" + token.Type + "'を発見しました");
                }
                //termCount++;
                wc.ShiftNext();
            } while (!varArg);
end:
            if (ternaryCount > 0)
            {
                throw new CodeEE("'?'と'#'の数が正しく対応していません");
            }
            return(stack.ReduceAll());
        }
コード例 #47
0
 public EmptyStrToken(VariableCode varCode, VariableData varData)
     : base(varCode, varData)
 {
     CanRestructure = true;
 }