From e3e55f49f878e4911971c134989a248d2ed4b041 Mon Sep 17 00:00:00 2001 From: Annie Date: Tue, 11 Feb 2025 14:23:28 -0500 Subject: [PATCH 1/4] added function to tokenize operators --- lexicalStructure.lex | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lexicalStructure.lex b/lexicalStructure.lex index 5426637..66904a8 100644 --- a/lexicalStructure.lex +++ b/lexicalStructure.lex @@ -1,4 +1,4 @@ -/* Lexical Analysis with Flex (2.6.0) We used some of the code from this manual */ +/* Lexical Analysis with Flex (1.6.0) We used some of the code from this manual */ /* so we placed the citation here. */ /* definitions */ %option noyywrap @@ -27,10 +27,25 @@ "function" {printf("FUNCTION %s, Token %d\n",yytext, FUNCTION);} //{return FUNCTION} "return" {printf("RETURN %s, Token %d\n",yytext, RETURN);} //{return RETURN} "external" {printf("EXTERNAL %s, Token %d\n",yytext, EXTERNAL);} //{return EXTERNAL} -"as" {printf("AS %s, Token %d\n",yytext, AS);} //{return AS} +"as" {printf("AS %s, Token %d\n",yytext, AS);} //{return AS}//% + /* OPERATORS */ + +\+ {printf("ADD %s, Token %d\n",yytext, ADD);} //return ADD +\- {printf("SUB_OR_NEG %s, Token %d\n",yytext, SUB_OR_NEG);} //return SUB_OR_NEG +\* {printf("MUL %s, Token %d\n",yytext, MUL);} //return MUL +\/ {printf("DIV %s, Token %d\n",yytext, DIV);} //return DIV +\% {printf("REM %s, Token %d\n",yytext, REM);} //return REM +\< {printf("LESS_THAN %s, Token %d\n",yytext, LESS_THAN);} //return LESS_THAN += {printf("EQUAL_TO %s, Token %d\n",yytext, EQUAL_TO);} //return EQUAL_TO +:= {printf("ASSIGN %s, Token %d\n",yytext, ASSIGN);} //return ASSIGN +! {printf("NOT %s, Token %d\n",yytext, NOT);} //return NOT +& {printf("AND %s, Token %d\n",yytext, AND);} //return AND +\| {printf("OR %s, Token %d\n",yytext, OR);} //return OR +\. {printf("DOT %s, Token %d\n",yytext, DOT);} //return DOT + + -%% int main(int argc, char *argv[]){ argc--, argv++; if ( argc > 0 ) From 488f61e889edaf68e231afe6ef2eabdb4b2e6f6e Mon Sep 17 00:00:00 2001 From: Annie Date: Tue, 11 Feb 2025 15:05:58 -0500 Subject: [PATCH 2/4] added tokenization for reserve and release --- lexicalStructure.lex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lexicalStructure.lex b/lexicalStructure.lex index 66904a8..bf04b31 100644 --- a/lexicalStructure.lex +++ b/lexicalStructure.lex @@ -43,6 +43,8 @@ & {printf("AND %s, Token %d\n",yytext, AND);} //return AND \| {printf("OR %s, Token %d\n",yytext, OR);} //return OR \. {printf("DOT %s, Token %d\n",yytext, DOT);} //return DOT +"reserve" {printf("RESERVE %s, Token %d\n",yytext, RESERVE);} //return RESERVE +"release" {printf("RELEASE %s, Token %d\n",yytext, RELEASE);} //return RELEASE From 8e9ef7a4a5d2fa92c9d0936eab1dd17551bb6f17 Mon Sep 17 00:00:00 2001 From: Annie Date: Tue, 11 Feb 2025 16:01:43 -0500 Subject: [PATCH 3/4] added test for operators and removed extra line from .lex file to fix tokenization --- lexicalStructure.lex | 29 ++++++++++++++--------------- tests/test_operators.alpha | 23 +++++++++++++++++++++++ 2 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 tests/test_operators.alpha diff --git a/lexicalStructure.lex b/lexicalStructure.lex index bf04b31..3b88c9b 100644 --- a/lexicalStructure.lex +++ b/lexicalStructure.lex @@ -9,7 +9,6 @@ %% -.|\n "integer" {printf("T_INTEGER %s, Token %d\n",yytext, T_INTEGER);} //{return T_INTEGER} "address" {printf("T_ADDRESS %s, Token %d\n",yytext, T_ADDRESS);} //{return T_ADDRESS} "Boolean" {printf("T_BOOLEAN %s, Token %d\n",yytext, T_BOOLEAN);} //{return T_BOOLEAN} @@ -27,25 +26,25 @@ "function" {printf("FUNCTION %s, Token %d\n",yytext, FUNCTION);} //{return FUNCTION} "return" {printf("RETURN %s, Token %d\n",yytext, RETURN);} //{return RETURN} "external" {printf("EXTERNAL %s, Token %d\n",yytext, EXTERNAL);} //{return EXTERNAL} -"as" {printf("AS %s, Token %d\n",yytext, AS);} //{return AS}//% +"as" {printf("AS %s, Token %d\n",yytext, AS);} //{return AS}// /* OPERATORS */ -\+ {printf("ADD %s, Token %d\n",yytext, ADD);} //return ADD -\- {printf("SUB_OR_NEG %s, Token %d\n",yytext, SUB_OR_NEG);} //return SUB_OR_NEG -\* {printf("MUL %s, Token %d\n",yytext, MUL);} //return MUL -\/ {printf("DIV %s, Token %d\n",yytext, DIV);} //return DIV -\% {printf("REM %s, Token %d\n",yytext, REM);} //return REM -\< {printf("LESS_THAN %s, Token %d\n",yytext, LESS_THAN);} //return LESS_THAN -= {printf("EQUAL_TO %s, Token %d\n",yytext, EQUAL_TO);} //return EQUAL_TO -:= {printf("ASSIGN %s, Token %d\n",yytext, ASSIGN);} //return ASSIGN -! {printf("NOT %s, Token %d\n",yytext, NOT);} //return NOT -& {printf("AND %s, Token %d\n",yytext, AND);} //return AND -\| {printf("OR %s, Token %d\n",yytext, OR);} //return OR -\. {printf("DOT %s, Token %d\n",yytext, DOT);} //return DOT +"+" {printf("ADD %s, Token %d\n",yytext, ADD);} //return ADD +"-" {printf("SUB_OR_NEG %s, Token %d\n",yytext, SUB_OR_NEG);} //return SUB_OR_NEG +"*" {printf("MUL %s, Token %d\n",yytext, MUL);} //return MUL +"/" {printf("DIV %s, Token %d\n",yytext, DIV);} //return DIV +"%" {printf("REM %s, Token %d\n",yytext, REM);} //return REM +"<" {printf("LESS_THAN %s, Token %d\n",yytext, LESS_THAN);} //return LESS_THAN +"=" {printf("EQUAL_TO %s, Token %d\n",yytext, EQUAL_TO);} //return EQUAL_TO +":=" {printf("ASSIGN %s, Token %d\n",yytext, ASSIGN);} //return ASSIGN +"!" {printf("NOT %s, Token %d\n",yytext, NOT);} //return NOT +"&" {printf("AND %s, Token %d\n",yytext, AND);} //return AND +"|" {printf("OR %s, Token %d\n",yytext, OR);} //return OR +"." {printf("DOT %s, Token %d\n",yytext, DOT);} //return DOT "reserve" {printf("RESERVE %s, Token %d\n",yytext, RESERVE);} //return RESERVE "release" {printf("RELEASE %s, Token %d\n",yytext, RELEASE);} //return RELEASE - +%% int main(int argc, char *argv[]){ diff --git a/tests/test_operators.alpha b/tests/test_operators.alpha new file mode 100644 index 0000000..b985387 --- /dev/null +++ b/tests/test_operators.alpha @@ -0,0 +1,23 @@ ++ +- +* +/ +\ +% +< +> += +:= +=: +: += +! +& +| +. +relEASE +release +RELEASE +reserve +RESERVE +reSERVe \ No newline at end of file From a7fa7bb6695ec1e730331ff3e4f556545a6251ae Mon Sep 17 00:00:00 2001 From: Annie Date: Tue, 11 Feb 2025 16:09:57 -0500 Subject: [PATCH 4/4] removed print statements from .lex file and added test_operators to Makefile --- Makefile | 30 ++++++++++++++++-------------- lexicalStructure.lex | 28 ++++++++++++++-------------- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/Makefile b/Makefile index a9544ee..3a7cffc 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,16 @@ -# Basic Makefile example from flex documentation -- provides explicit rules -# Creates "myprogram" from "scan.l" and "myprogram.c" -# -#LEX=flex -#myprogram: scan.o myprogram.o - #$(CC) -o $@ $(LDFLAGS) $^ -#myprogram.o: myprogram.c - #$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $^ -#scan.o: scan.c - #$(CC) $(CPPFLAGS) $(CFLAGS) -o $@ -c $^ -#scan.c: scan.l - #$(LEX) $(LFLAGS) -o $@ $^ -#clean: - #$(RM) *.o scan.c +CC := gcc +FLEX := flex +LEX := lexicalStructure.lex +EXE := lexicalStructure + +lexicalStructure: + $(FLEX) $(LEX) + $(CC) lex.yy.c -o $(EXE) + +test_operators: + ./$(EXE) ./tests/test_operators.alpha + +clean: + rm -f *.o + rm -f lex.yy.c + rm -f $(EXE) diff --git a/lexicalStructure.lex b/lexicalStructure.lex index 3b88c9b..66ea37e 100644 --- a/lexicalStructure.lex +++ b/lexicalStructure.lex @@ -30,20 +30,20 @@ /* OPERATORS */ -"+" {printf("ADD %s, Token %d\n",yytext, ADD);} //return ADD -"-" {printf("SUB_OR_NEG %s, Token %d\n",yytext, SUB_OR_NEG);} //return SUB_OR_NEG -"*" {printf("MUL %s, Token %d\n",yytext, MUL);} //return MUL -"/" {printf("DIV %s, Token %d\n",yytext, DIV);} //return DIV -"%" {printf("REM %s, Token %d\n",yytext, REM);} //return REM -"<" {printf("LESS_THAN %s, Token %d\n",yytext, LESS_THAN);} //return LESS_THAN -"=" {printf("EQUAL_TO %s, Token %d\n",yytext, EQUAL_TO);} //return EQUAL_TO -":=" {printf("ASSIGN %s, Token %d\n",yytext, ASSIGN);} //return ASSIGN -"!" {printf("NOT %s, Token %d\n",yytext, NOT);} //return NOT -"&" {printf("AND %s, Token %d\n",yytext, AND);} //return AND -"|" {printf("OR %s, Token %d\n",yytext, OR);} //return OR -"." {printf("DOT %s, Token %d\n",yytext, DOT);} //return DOT -"reserve" {printf("RESERVE %s, Token %d\n",yytext, RESERVE);} //return RESERVE -"release" {printf("RELEASE %s, Token %d\n",yytext, RELEASE);} //return RELEASE +"+" {return ADD;} +"-" {return SUB_OR_NEG;} +"*" {return MUL;} +"/" {return DIV;} +"%" {return REM;} +"<" {return LESS_THAN;} +"=" {return EQUAL_TO;} +":=" {return ASSIGN;} +"!" {return NOT;} +"&" {return AND;} +"|" {return OR;} +"." {return DOT;} +"reserve" {return RESERVE;} +"release" {return RELEASE;} %%