skeleton for lab1

Dependencies:   AvailableMemory mbed-rtos mbed

Fork of helloaabbc by 32314 mbed

Revision:
0:1c8f2727e9f5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Parser.cpp	Thu Apr 03 22:56:32 2014 +0000
@@ -0,0 +1,107 @@
+#include "Parser.h"
+
+void Parser::parseSDFG(char *path, SDFG *sdfg){
+//  printf("Parsing SDF config... ", path); // Drive should be marked as removed
+  FILE *fp=fopen(path, "r");
+  if(!fp) {
+    error("ERROR: no file located at \"%s\"\r\n",path);
+    exit(1);
+  }
+  else
+  {
+//      printf("File opened!\n\r");
+  }
+  int n1=-1, n2=-1;
+  char line[1024], delim[]=" ", *cur=NULL, symbol;
+  for(int i=0; i<1024; i++)line[i]=0;
+  int nodeId=0;
+  while(fgets(line, 1024, fp)!=NULL){
+    int temp, params[256], count=0;
+    cur=strtok(line, delim);
+    if(n1<0 && n2<0){
+      n1=atoi(cur);
+      cur=strtok(NULL,delim);
+      n2=atoi(cur);
+      sdfg->setNumOfNodes(n1);
+      sdfg->setNumOfFIFOs(n2);
+    }else if(strlen(cur)!=1){
+      error("BAD SDFG FORMAT\r\n");
+      exit(1);
+    }else{
+        symbol = cur[0];
+        for(int i=0; i<256; i++)params[i]=0;
+        count=0;
+        cur=strtok(NULL,delim);
+        while(cur){
+          temp=atoi(cur);
+          params[count++]=temp;
+          cur=strtok(NULL,delim);
+        }
+        switch (symbol){
+          case 'I': sdfg->getINode(nodeId++, params, count);
+                    break;
+          case 'O': sdfg->getONode(nodeId++, params, count);
+                    break;
+          case 'A': sdfg->getANode(nodeId++, params, count);
+                    break;
+          case 'S': sdfg->getSNode(nodeId++, params, count);
+                    break;
+          case 'M': sdfg->getMNode(nodeId++, params, count);
+                    break;
+          case 'D': sdfg->getDNode(nodeId++, params, count);
+                    break;
+          case 'U': sdfg->getUNode(nodeId++, params, count);
+                    break;
+          case 'C': sdfg->getCNode(nodeId++, params, count);
+                    break;
+          case 'F': sdfg->getFNode(nodeId++, params, count);
+                    break;
+          case 'E': sdfg->addDelay(params, count);
+                    break;
+          default: error("ERROR: BAD SDFG FORMAT\r\n");
+                   exit(1);
+                   break;
+        }
+    }
+    for(int i=0; i<256; i++)params[i]=0;
+    for(int i=0; i<1024; i++)line[i]=0;
+  }
+  //printf("Closing File...\r\n");
+  fclose(fp);
+  sdfg->buildTopologyMatrix();
+}
+
+void Parser::parseInput(char *path, RingBuffer *buf){
+  //printf("Parsing input...\r\n");
+  FILE *fp=fopen(path, "r");
+  if(!fp){
+    error("ERROR: no file located at \"%s\"\r\n",path);
+    exit(1);
+  }
+  int count=0;
+  int N=0;
+  char line[20];
+  for(int i=0; i<20; i++)line[i]=0;
+  while(fgets(line, 20, fp)!=NULL){
+    if(count==0){
+      N=atoi(line);
+      if(N<0){
+        error("ERROR: BAD INPUT FORMAT\r\n");
+        exit(1);
+      }
+    }else{
+      buf->insert(atoi(line));
+    }
+    count++;
+    for(int i=0; i<20; i++) line[i]=0;
+  }
+  fclose(fp);
+  if(N!=count-1){
+    error("ERROR: BAD INPUT FORMAT\r\n");
+    exit(1);
+  }
+  else
+  {
+    //  printf("File closed.\n\r");
+  }
+}
\ No newline at end of file