Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public String calculateArg(String arg){
- String numfinalregex = "^[+-]?[0-9 ]+$";
- Pattern numfinalpattern = Pattern.compile(numfinalregex);
- Matcher numfinalmatcher = numfinalpattern.matcher(arg);
- String registerfinalregex = "^(%e[abcd]x)+$";
- Pattern registerfinalpattern = Pattern.compile(registerfinalregex);
- Matcher registerfinalmatcher = registerfinalpattern.matcher(arg);
- String bracketregex = "\\((.*)\\)";
- Pattern bracketpattern = Pattern.compile(bracketregex);
- Matcher bracketmatcher;
- String inbracketregex = "(?<=\\()(.*)(?=\\))";
- Pattern inbracketpattern = Pattern.compile(inbracketregex);
- Matcher inbracketmatcher;
- String anybracketregex = "\\(|\\)";
- Pattern anybracketpattern = Pattern.compile(anybracketregex);
- Matcher anybracketmatcher = anybracketpattern.matcher(arg);
- String multidivregex = "(^[+-])?( )*[0-9]+( )*[*/]( )*[0-9]+";
- Pattern multidivpattern = Pattern.compile(multidivregex);
- Matcher multidivmatcher;
- String addsubregex = "(^[+-])?( )*[0-9]+( )*[\\+\\-]( )*[0-9]+";
- Pattern addsubpattern = Pattern.compile(addsubregex);
- Matcher addsubmatcher;
- String registerregex ="(%e[abcd]x)+";
- Pattern registerpattern = Pattern.compile(registerregex);
- Matcher registermatcher;
- String errorregex = "^( )*[0-9 ]+( )*[\\+\\-\\*\\/]$";
- Pattern errorpattern = Pattern.compile(errorregex);
- Matcher errormatcher;
- boolean regs;
- if(!this.keyword.equals("int") && !(this.keyword.equals("push") && registerfinalmatcher.find())){
- while(!numfinalmatcher.find()) {
- numfinalmatcher = numfinalpattern.matcher(arg);
- bracketmatcher = bracketpattern.matcher(arg);
- inbracketmatcher = inbracketpattern.matcher(arg);
- anybracketmatcher = anybracketpattern.matcher(arg);
- multidivmatcher = multidivpattern.matcher(arg);
- addsubmatcher = addsubpattern.matcher(arg);
- registermatcher = registerpattern.matcher(arg);
- errormatcher = errorpattern.matcher(arg);
- regs = false;
- while(registermatcher.find()){
- int tmpreg = 0;
- if (registermatcher.group(0).equals("%eax")) tmpreg = this.parent.reg.getEax();
- if (registermatcher.group(0).equals("%ebx")) tmpreg = this.parent.reg.getEbx();
- if (registermatcher.group(0).equals("%ecx")) tmpreg = this.parent.reg.getEcx();
- if (registermatcher.group(0).equals("%edx")) tmpreg = this.parent.reg.getEdx();
- arg = arg.replaceAll(registermatcher.group(0), Integer.toString(tmpreg));
- regs = true;
- }
- if(regs) continue;
- if(anybracketmatcher.find()){
- if(bracketmatcher.find()) {
- if (inbracketmatcher.find()) {
- String temp;
- if ((temp = calculateArg(inbracketmatcher.group(0))) != "#ERR") {
- arg = arg.replace(bracketmatcher.group(0), temp);
- //arg = calculateArg(arg);
- } else return "#ERR";
- } else return "#ERR";
- } else return "#ERR";
- } else if(multidivmatcher.find()){
- String ma1 = "";
- String ma2 = "";
- String mop = "";
- String marg1regex = "";
- String marg2regex = "";
- String mopregex = "";
- String mtmptxt = "";
- Pattern mtmppattern;
- Matcher mtmpmatcher;
- mtmptxt = multidivmatcher.group(0);
- marg1regex = "(^[+-])?( )*[0-9]+( )*(?=[\\*\\/])";
- mtmppattern = Pattern.compile(marg1regex);
- mtmpmatcher = mtmppattern.matcher(arg);
- if(mtmpmatcher.find()) ma1 = mtmpmatcher.group(0);
- marg2regex = "(?<=("+ma1+")[\\*\\/])( )*[0-9]+( )*";
- mopregex = "(?<=("+ma1+"))[\\*\\/]";
- mtmppattern = Pattern.compile(marg2regex);
- mtmpmatcher = mtmppattern.matcher(arg);
- if(mtmpmatcher.find()) ma2 = mtmpmatcher.group(0);
- mtmppattern = Pattern.compile(mopregex);
- mtmpmatcher = mtmppattern.matcher(arg);
- if(mtmpmatcher.find()) mop = mtmpmatcher.group(0);
- arg = arg.replace(mtmptxt, this.solve(ma1, ma2, mop));
- } else if(addsubmatcher.find()){
- String a1 = "";
- String a2 = "";
- String op = "";
- String arg1regex = "";
- String arg2regex = "";
- String opregex = "";
- String tmptxt = "";
- Pattern tmppattern;
- Matcher tmpmatcher;
- tmptxt = addsubmatcher.group(0);
- arg1regex = "(^[+-])?( )*[0-9]+( )*(?=[\\+\\-])";
- tmppattern = Pattern.compile(arg1regex);
- tmpmatcher = tmppattern.matcher(arg);
- if(tmpmatcher.find()) a1 = tmpmatcher.group(0);
- arg2regex = "(?<=("+a1+")[\\+\\-])( )*[0-9]+( )*";
- opregex = "(?<=("+a1+"))[\\+\\-]";
- tmppattern = Pattern.compile(arg2regex);
- tmpmatcher = tmppattern.matcher(arg);
- if(tmpmatcher.find()) a2 = tmpmatcher.group(0);
- tmppattern = Pattern.compile(opregex);
- tmpmatcher = tmppattern.matcher(arg);
- if(tmpmatcher.find()) op = tmpmatcher.group(0);
- arg = arg.replace(tmptxt, this.solve(a1, a2, op));
- } else if(errormatcher.find()){
- return "#ERR";
- } //else return calculateArg(arg);
- }
- return arg;
- }
- return arg;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement