From 12ebd3464be00a1d6124dfcb406aa8119f26b94f Mon Sep 17 00:00:00 2001 From: dipsywong98 Date: Mon, 6 Nov 2017 10:27:26 +0800 Subject: [PATCH] done --- {assignment2 => assign2}/Expected_results.txt | 0 {assignment2 => assign2}/assign2.pdf | Bin .../matfunc.yy.lex => assign2/matfunc.lex | 14 ++--- {assignment2 => assign2}/matfunc.y | 12 ++-- assign2/results.txt | 13 +++++ {assignment2 => assign2}/run.sh | 3 +- {assignment2 => assign2}/test.sh | 1 - {assignment2 => assign2}/testcase.txt | 0 assignment2/matfunc.lex | 52 ------------------ assignment2/results.txt | 0 assignment2/test | Bin 33064 -> 0 bytes 11 files changed, 28 insertions(+), 67 deletions(-) rename {assignment2 => assign2}/Expected_results.txt (100%) rename {assignment2 => assign2}/assign2.pdf (100%) rename assignment2/matfunc.yy.lex => assign2/matfunc.lex (76%) rename {assignment2 => assign2}/matfunc.y (97%) create mode 100644 assign2/results.txt rename {assignment2 => assign2}/run.sh (59%) rename {assignment2 => assign2}/test.sh (66%) rename {assignment2 => assign2}/testcase.txt (100%) delete mode 100644 assignment2/matfunc.lex delete mode 100644 assignment2/results.txt delete mode 100644 assignment2/test diff --git a/assignment2/Expected_results.txt b/assign2/Expected_results.txt similarity index 100% rename from assignment2/Expected_results.txt rename to assign2/Expected_results.txt diff --git a/assignment2/assign2.pdf b/assign2/assign2.pdf similarity index 100% rename from assignment2/assign2.pdf rename to assign2/assign2.pdf diff --git a/assignment2/matfunc.yy.lex b/assign2/matfunc.lex similarity index 76% rename from assignment2/matfunc.yy.lex rename to assign2/matfunc.lex index f6d0fde..b4e1c4d 100644 --- a/assignment2/matfunc.yy.lex +++ b/assign2/matfunc.lex @@ -18,19 +18,19 @@ digits [0-9] number [\-]?(0|([1-9]+{digits}*)) /************* Start: add your definitions here*/ - /************* End: add your definitions here */ %% \n return *yytext; /* Start: add your rules here*/ + +REV yylval = "REV";printf("%s",yytext);return REV; +NEG yylval = "NEG";printf("%s",yytext);return NEG; +{number} yylval = (char*)malloc(sizeof(char)*MAXL);strcpy(yylval, yytext);printf("%s",yytext);return NUM; -REV yyval = "REV";return REV; -NEG yyval = "NEG";return NEG; -{number} yylval = (char*)malloc(sizeof(char)*MAXL);strcpy(yylval, yytext);return NUM; -. printf("%c",*yytext); - - /* End: add your rules here*/ +[+\-*\/,\[\]\n()] printf("%s",yytext);return *yytext; {ws} +. printf("missed: '%s'", yytext); + /* End: add your rules here*/ %% void RmWs(char* str){ diff --git a/assignment2/matfunc.y b/assign2/matfunc.y similarity index 97% rename from assignment2/matfunc.y rename to assign2/matfunc.y index b4ef000..e35ff14 100644 --- a/assignment2/matfunc.y +++ b/assign2/matfunc.y @@ -50,7 +50,7 @@ line: '\n' expr: s1 {$$=$1;} ; -s1: s1 '+' s2 {$$=Add($1,$3);printf("plus:%s + %s",$1,$3);} +s1: s1 '+' s2 {$$=Add($1,$3);} | s1 '-' s2 {$$=Minus($1,$3);} | s2 {$$=$1;} ; @@ -68,7 +68,7 @@ s4: MATRIX {$$=$1} MATRIX: '[' COLS ']'{$$=malloc(sizeof(char*)*MAXL);sprintf($$,"[%s]",$2);} ; COLS: ROW {$$=$1;} - | ROW ',' {$$=malloc(sizeof(char*)*(strlen($1)+1));sprintf($$,"%s,",$1);} + | ROW ',' COLS {$$=malloc(sizeof(char*)*(strlen($1)+1));sprintf($$,"%s,%s",$1,$3);} ROW: '[' VEC ']' {$$=malloc(sizeof(char*)*MAXL);sprintf($$,"[%s]",$2);} ; VEC: NUM ',' VEC {$$=malloc(sizeof(char*)*MAXL);sprintf($$,"%s,%s",$1,$3);} @@ -102,10 +102,10 @@ int main(int argc, char *argv[]){ int yyerror(const char* s) { -// extern int yylineno; -// extern char *yytext; -// printf("\n^%d: %s at %s #%d\n", yylineno, s, yytext, (int)(*yytext)); -// return 0; + /*extern int yylineno; + extern char *yytext; + printf("\n^%d: %s at %s #%d\n", yylineno, s, yytext, (int)(*yytext)); + return 0;*/ } char *FFormat(const char* str){ diff --git a/assign2/results.txt b/assign2/results.txt new file mode 100644 index 0000000..f29f7a2 --- /dev/null +++ b/assign2/results.txt @@ -0,0 +1,13 @@ +[[2]] +[[2]] +[[2,4]] +[[2,4],[12,14],[10,10]] +[[5,205,19],[-223,13,25]] +[[6,271,22],[201,25,45]] +[[6,5,4],[3,2,1]] +[[3,6],[9,12]] +[[2,4],[6,8]] +[[2,4,6],[4,6,8]] +[[5,207,19],[1931,13,43]] +[[0,0,0],[0,0,0]] +[[-2,-4,-6],[-2,-4,-6]] diff --git a/assignment2/run.sh b/assign2/run.sh similarity index 59% rename from assignment2/run.sh rename to assign2/run.sh index aab3543..3fc1673 100644 --- a/assignment2/run.sh +++ b/assign2/run.sh @@ -1,7 +1,8 @@ #!/bin/bash +#cd ../../mnt/c/Users/dipsy/Desktop/course/COMP3031/assign2 + bison -d matfunc.y -#flex -o matfunc.lex.yy.c matfunc.lex flex matfunc.lex gcc *.c -o test -lm ./test testcase.txt diff --git a/assignment2/test.sh b/assign2/test.sh similarity index 66% rename from assignment2/test.sh rename to assign2/test.sh index d7d618c..7e4cb7c 100644 --- a/assignment2/test.sh +++ b/assign2/test.sh @@ -1,7 +1,6 @@ #!/bin/bash bison -d matfunc.y -#flex -o matfunc.lex.yy.c matfunc.lex flex matfunc.lex gcc *.c -o test -lm ./test diff --git a/assignment2/testcase.txt b/assign2/testcase.txt similarity index 100% rename from assignment2/testcase.txt rename to assign2/testcase.txt diff --git a/assignment2/matfunc.lex b/assignment2/matfunc.lex deleted file mode 100644 index d115978..0000000 --- a/assignment2/matfunc.lex +++ /dev/null @@ -1,52 +0,0 @@ -%option noyywrap - -%{ -#define YYSTYPE char* -#include "matfunc.tab.h" -#include -#include -#include -#include -#define MAXL 5000 -#include -void RmWs(char* str); - -%} - -ws [ \t]+ -digits [0-9] -number [\-]?(0|([1-9]+{digits}*)) - /************* Start: add your definitions here*/ -matric \[ *( *\[ *( *-?[0-9]+ *, *)* *-?[0-9]+ *\] *, *)*( *\[ *( *-?[0-9]+ *, *)* *-?[0-9]+ *\] *) *\] - - /************* End: add your definitions here */ -%% -\n return *yytext; - /* Start: add your rules here*/ - -REV yylval = "REV";printf("%s",yytext);return REV; -NEG yylval = "NEG";printf("%s",yytext);return NEG; -{number} yylval = (char*)malloc(sizeof(char)*MAXL);strcpy(yylval, yytext);printf("%s",yytext);return NUM; -\[ printf("%c",*yytext); return *yytext; -\] printf("%c",*yytext); return *yytext; -, printf("%c",*yytext); return *yytext; -[+\-*\/] printf("%c",*yytext); return *yytext; -. if(*yytext==' '||*yytext=='\t'){REJECT;}else{ printf("missed:%c",*yytext);} - - /* End: add your rules here*/ -{ws} -%% - -void RmWs(char* str){ - int i=0,j=0; - char temp[strlen(str)+1]; - double x,y; - strcpy(temp,str); - while (temp[i]!='\0'){ - while (temp[i]==' '||temp[i]=='\t'){i++;} - str[j]=temp[i]; - i++; j++; - } - str[j]='\0'; -} - diff --git a/assignment2/results.txt b/assignment2/results.txt deleted file mode 100644 index e69de29..0000000 diff --git a/assignment2/test b/assignment2/test deleted file mode 100644 index cb3f803425023600d6a7263365a26a3e27a012ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33064 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

;rEGd=z{1PXJEEV-foS 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