public bool GetDefVar(ScriptLine line, ref string data, ref int isNum) { if (!CheckSwitchBlock()) { return(false); } if (!line.GetWord(ref data, " \t+-")) { // Error("정의 또는 숫자 정보가 없습니다"); Error("there are no define or number"); return(false); } if (IsNum(data)) { isNum = 1; return(true); } TokenInfo pTokenInfo; if (!m_tokenMap.Get(data, out pTokenInfo)) { // Error("%s 는 정의되지 않은 토큰입니다", data); Error("{0} - not defined token", data); return(false); } data = pTokenInfo.str; isNum = pTokenInfo.num; var op = string.Empty; if (line.GetOperator(ref op, "+-")) { int n = Convert.ToInt32(data); if (op.Equals("++")) { n++; } else if (op.Equals("--")) { n--; } else { // Error("%s 는 사용될수 없는 정의 연산자입니다", op); Error("%s can not use define operater", op); return(false); } pTokenInfo.str = n.ToString(); } return(true); }
public bool Value(ScriptLine line, bool flag = true) { var data = string.Empty; var op = string.Empty; while (true) { line.Skip(" \t["); if (line.GetParse(ref data, '"')) { if (data.Length >= 250) { Error("Value: 250 strlen(data) >= 250 {0}", data); return(false); } WriteStr(data); } else if (line.GetParse(ref data, '#')) { TokenInfo tokenInfo; if (!m_tokenMap.Get(data, out tokenInfo)) { Error("Value: [{0}] is not in a token map - GetParse", data); return(false); } if (tokenInfo.num > 0) { WriteNum(Convert.ToInt32(tokenInfo.GetStr())); } else { WriteStr(tokenInfo.GetStr()); } } else if (line.GetWord(ref data, "%!=+-/*&|>< \t[],")) { if (IsNum(data)) { WriteNum(Convert.ToInt32(data)); } else { TokenInfo tokenInfo; if (!m_tokenMap.Get(data, out tokenInfo)) { Error("Value: [{0}] is not in a token map - GetWord", data); return(false); } switch (tokenInfo.type) { case TOKENTYPE.TOKENTYPE_VAR: WriteVar(data); break; case TOKENTYPE.TOKENTYPE_DEFINE: if (tokenInfo.num > 0) { WriteNum(Convert.ToInt32(tokenInfo.GetStr())); } else { WriteStr(tokenInfo.GetStr()); } break; case TOKENTYPE.TOKENTYPE_FUNC: WriteCall(data); if (!OnFunc(line, tokenInfo.num, tokenInfo.GetStr())) { Error("Value: Func not found"); return(false); } break; default: { // Error("Value: %s 토큰은 사용될수 없습니다 line:%s", data, line.GetBase()); Error("Value: {0} tokenInfo->type not found line:{1}", data, line.GetBase()); return(false); } } } } else { // if (flag) Error("Value:값이 없습니다 line:%s", line.GetBase()); return(false); } line.Skip(" \t,"); if (!line.GetOperator(ref op, "%=+-/*&|><!")) { break; } if (string.IsNullOrEmpty(op)) { break; } if (!WriteOp(op)) { Error("Value: write error!"); return(false); } } line.Skip("]"); WriteOp(";"); return(true); }
public override bool OnVar(ScriptLine line, string name) { var op = string.Empty; line.Skip(" \t"); if (!line.GetOperator(ref op, "=+-*/%")) { //if (!op[0]) return true; //Error("OnVar1: !op [{0}] ", op); //return false; return(true); } CODE code = 0; if (op.Equals("=")) { code = CODE.CODE_MOV; } else if (op.Equals("+=")) { code = CODE.CODE_ADD; } else if (op.Equals("-=")) { code = CODE.CODE_SUB; } else if (op.Equals("*=")) { code = CODE.CODE_MUL; } else if (op.Equals("/=")) { code = CODE.CODE_DIV; } else if (op.Equals("++")) { code = CODE.CODE_INC; } else if (op.Equals("--")) { code = CODE.CODE_DEC; } else if (op.Equals("%=")) { code = CODE.CODE_MOD; } else { Error("OnVar2: [{0}] operator error1", op); return(false); } WriteCode(code); WriteVar(name); if (code == CODE.CODE_INC || code == CODE.CODE_DEC) { return(true); } if (!Value(line)) { Error("{0} OnVar: !Value(line)", name); return(false); } return(true); }