From: jzhou Date: Thu, 17 May 2012 03:01:58 +0000 (+0000) Subject: Enable the nextDoublt() call for reading input files X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a77d99f1e5b269440d7be4fdef47083f8ad16399;p=IRC.git Enable the nextDoublt() call for reading input files --- diff --git a/Robust/src/Makefile b/Robust/src/Makefile index 3482903d..56fb4302 100644 --- a/Robust/src/Makefile +++ b/Robust/src/Makefile @@ -101,6 +101,7 @@ Analysis/OoOJava/VariableSourceToken.class \ Analysis/OoOJava/ContextTaskNames.class \ Util/GraphNode.class Util/Namer.class Util/Relation.class \ Util/UtilAlgorithms.class \ +Util/InputFileTranslator.class \ Interface/HTTPHeader.class Interface/HTTPResponse.class \ Interface/HTTPServices.class Interface/HashStrings.class \ Interface/JhttpServer.class Interface/JhttpWorker.class \ @@ -120,7 +121,7 @@ Analysis/Scheduling/Schedule.class \ Analysis/Scheduling/ScheduleSimulator.class \ Analysis/Scheduling/SchedulingUtil.class \ Analysis/Scheduling/TaskSimulator.class \ -Analysis/Scheduling/TransTaskSimulator.class +Analysis/Scheduling/TransTaskSimulator.class JAVAFILES=IR/*.java \ IR/Flat/*.java \ diff --git a/Robust/src/Util/InputFileTranslator.java b/Robust/src/Util/InputFileTranslator.java index c34e4031..760b5b92 100644 --- a/Robust/src/Util/InputFileTranslator.java +++ b/Robust/src/Util/InputFileTranslator.java @@ -51,12 +51,13 @@ public class InputFileTranslator{ outFilename = PREFIX+"InputFileArrays.c"; out = new PrintWriter(new FileWriter(new File(outFilename))); out.println("#include \"InputFileArrays.h\""); + out.println("#include \"math.h\""); out.println(); Vector sourcefiles=new Vector(); for(int i=0; i 0) { out.println(','); @@ -142,6 +143,7 @@ public class InputFileTranslator{ out.println(" }"); out.println(); } + out.println(" return -1;"); out.println("}"); out.println(); @@ -149,35 +151,35 @@ public class InputFileTranslator{ out.println(" int i = 0;"); out.println(" unsigned char * filearray = inputFileArrays[fd];"); out.println(" while((filearray[*pos]==\' \')||(filearray[*pos]==\'\\n\')){"); - out.println(" *pos++;"); + out.println(" *pos=*pos+1;"); out.println(" }"); - out.println(" int value = 0;"); + out.println(" unsigned int value = 0;"); out.println(" bool isNeg=false;"); - out.println(" int radix = 10;"); + out.println(" unsigned int radix = 10;"); out.println(); out.println(" if (filearray[*pos]==\'-\') {"); out.println(" isNeg=true;"); - out.println(" *pos++;"); + out.println(" *pos=*pos+1;"); out.println(" }"); out.println(" bool cont=true;"); out.println(" do {"); - out.println(" unsigned char b=filearray[*pos];"); - out.println(" int val;"); - out.println(" if (b>=\'0\'&&b<=\'9\')"); - out.println(" val=b-\'0\';"); - out.println(" else if (b>=\'a\'&&b<=\'z\')"); - out.println(" val=10+b-\'a\';"); - out.println(" else if (b>=\'A\'&&b<=\'Z\')"); - out.println(" val=10+b-\'A\';"); - out.println(" else {"); - out.println(" cont=false;"); - out.println(" }"); - out.println(" if (cont) {"); - out.println(" if (val>=radix)"); - out.println(" printf(\"Error in nextInt(): val >= radix\");"); - out.println(" value=value*radix+val;"); - out.println(" *pos++;"); - out.println(" }"); + out.println(" unsigned char b=filearray[*pos];"); + out.println(" unsigned int val;"); + out.println(" if (b>=\'0\'&&b<=\'9\')"); + out.println(" val=b-\'0\';"); + out.println(" else if (b>=\'a\'&&b<=\'z\')"); + out.println(" val=10+b-\'a\';"); + out.println(" else if (b>=\'A\'&&b<=\'Z\')"); + out.println(" val=10+b-\'A\';"); + out.println(" else {"); + out.println(" cont=false;"); + out.println(" }"); + out.println(" if (cont) {"); + out.println(" if (val>=radix)"); + out.println(" printf(\"Error in nextInt(): val >= radix\");"); + out.println(" value=value*radix+val;"); + out.println(" *pos=*pos+1;"); + out.println(" }"); out.println(" }while(cont);"); out.println(" if (isNeg)"); out.println(" value=-value;"); @@ -190,11 +192,106 @@ public class InputFileTranslator{ out.println(" int i = 0;"); out.println(" unsigned char * filearray = inputFileArrays[fd];"); out.println(" while((filearray[*pos]==\' \')||(filearray[*pos]==\'\\n\')){"); - out.println(" *pos++;"); + out.println(" *pos=*pos+1;"); out.println(" }"); - out.println(" double value = 0.0;"); - out.println("//TODO"); - out.println(" return value;"); + out.println(" double result=0.0;"); + out.println(" unsigned int value=0;"); + out.println(" unsigned int maxvalue=((unsigned int)(1<<32)-1)/10;"); + out.println(" bool isNeg=false;"); + out.println(" bool isDiv=false;"); + out.println(" unsigned int radix = 10;"); + out.println(); + out.println(" if (filearray[*pos]=='-') {"); + out.println(" isNeg=true;"); + out.println(" *pos=*pos+1;"); + out.println(" }"); + out.println(" bool cont=true;"); + out.println(" bool exp=false;"); + out.println(" bool decimal=false;"); + out.println(" bool compute=true;"); + out.println(" bool omit=false;"); + out.println(" unsigned int dcount=0;"); + out.println(" // compute the base"); + out.println(" do {"); + out.println(" unsigned char b=filearray[*pos];"); + out.println(" unsigned int val;"); + out.println(" if (b>='0'&&b<='9') {"); + out.println(" if (!omit) {"); + out.println(" val=b-'0';"); + out.println(" if(decimal) {"); + out.println(" dcount++;"); + out.println(" }"); + out.println(" }"); + out.println(" } else if (b=='.') {"); + out.println(" decimal=true;"); + out.println(" compute=false;"); + out.println(" } else if (b=='E'||b=='e') {"); + out.println(" exp=true;"); + out.println(" cont=false;"); + out.println(" *pos=*pos+1;"); + out.println(" } else {"); + out.println(" cont=false;"); + out.println(" }"); + out.println(" if (cont) {"); + out.println(" if (val>=radix)"); + out.println(" printf(\"Error in nextDouble(): val >= radix\");"); + out.println(" if(compute) {"); + out.println(" if(value='0'&&b<='9') {"); + out.println(" val=b-'0';"); + out.println(" } else {"); + out.println(" cont=false;"); + out.println(" }"); + out.println(" if (cont) {"); + out.println(" if (val>=radix)"); + out.println(" printf(\"Error in nextDouble(): val >= radix\");"); + out.println(" n=n*10+val;"); + out.println(" *pos=*pos+1;"); + out.println(" }"); + out.println(" }while(cont);"); + out.println(" if(isDiv) {"); + out.println(" result = (double)value/pow(radix, n+dcount);"); + out.println(" } else {"); + out.println(" if(n>dcount) {"); + out.println(" result = (double)value*pow(radix, n-dcount);"); + out.println(" } else if(n