From 7095f728d960f1645d10c8f16eeb3ff38f3bf25b Mon Sep 17 00:00:00 2001 From: BoJavs Date: Sun, 27 Apr 2025 16:42:26 -0600 Subject: [PATCH 1/2] Solution lab 04 Act3.1 --- labs/04/lex3.1/Makefile | 10 ++++ labs/04/lex3.1/code_generator.py | 78 +++++++++++++++++++++++++++++++ labs/04/lex3.1/example.ac | 6 +++ labs/04/lex3.1/lex | Bin 0 -> 31360 bytes labs/04/lex3.1/lex.l | 44 +++++++++++++++++ 5 files changed, 138 insertions(+) create mode 100644 labs/04/lex3.1/Makefile create mode 100644 labs/04/lex3.1/code_generator.py create mode 100644 labs/04/lex3.1/example.ac create mode 100755 labs/04/lex3.1/lex create mode 100644 labs/04/lex3.1/lex.l diff --git a/labs/04/lex3.1/Makefile b/labs/04/lex3.1/Makefile new file mode 100644 index 00000000..97523523 --- /dev/null +++ b/labs/04/lex3.1/Makefile @@ -0,0 +1,10 @@ +all: + lex lex.l + gcc lex.yy.c -o lex -ll + python3 code_generator.py > example.ac + ./lex example.ac + + +clean: + rm -rf *.c + rm -rf lex \ No newline at end of file diff --git a/labs/04/lex3.1/code_generator.py b/labs/04/lex3.1/code_generator.py new file mode 100644 index 00000000..4ae97e16 --- /dev/null +++ b/labs/04/lex3.1/code_generator.py @@ -0,0 +1,78 @@ +import string +import random +import argparse + +def id_generator(size=10, chars=string.ascii_uppercase + string.digits): + return ''.join(random.choice(chars) for _ in range(size)) + +opreators = ["+","-","*","/"] + +def get_comment_line(): + comment_line = "//%s" % (id_generator()) + return comment_line + +def get_float_line(): + float_line = "f %s" % (random.choice(string.ascii_lowercase)) + return float_line + +def get_integer_line(): + integer_line = "i %s"% (random.choice(string.ascii_lowercase)) + return integer_line + +def get_asigment_line(): + asigment_line = "%s = %s" %(random.choice(string.ascii_lowercase),\ + random.randint(0,100)) + return asigment_line + +def get_asigment_line_2(): + asigment_line_2 = "%s = %s %s %s" % \ + (random.choice(string.ascii_lowercase),\ + random.choice(string.ascii_lowercase),\ + random.choice(opreators),\ + random.randint(0,100)) + return asigment_line_2 + +def get_print_line(): + print_line = "p %s" % (random.choice(string.ascii_lowercase)) + return print_line + + +parser = argparse.ArgumentParser(description='Generate random AC code') +parser.add_argument('--stress', dest='stress', action='store_true',\ + help='generate HUGE code to stress the lab') +args = parser.parse_args() + +if args.stress: + f= open("random_code.ac","w+") + for x in range(0, 100000): + comment_line = get_comment_line() + float_line = get_float_line() + integer_line = get_integer_line() + asigment_line = get_asigment_line() + asigment_line_2 = get_asigment_line_2() + print_line = get_print_line() + + f.write(comment_line + "\n") + f.write(float_line + "\n") + f.write(integer_line + "\n") + f.write(asigment_line+ "\n") + f.write(asigment_line_2 + "\n") + f.write(print_line + "\n") + + f.close() + +else: + comment_line = get_comment_line() + float_line = get_float_line() + integer_line = get_integer_line() + asigment_line = get_asigment_line() + asigment_line_2 = get_asigment_line_2() + print_line = get_print_line() + + print(comment_line) + print(float_line) + print(integer_line) + print(asigment_line) + print(asigment_line_2) + print(print_line) + diff --git a/labs/04/lex3.1/example.ac b/labs/04/lex3.1/example.ac new file mode 100644 index 00000000..9fbf308c --- /dev/null +++ b/labs/04/lex3.1/example.ac @@ -0,0 +1,6 @@ +//FWBU5F1Z96 +f n +i m +r = 93 +c = i + 71 +p w diff --git a/labs/04/lex3.1/lex b/labs/04/lex3.1/lex new file mode 100755 index 0000000000000000000000000000000000000000..ccb815d7802fb3c880cad716e4b42b4b70044203 GIT binary patch literal 31360 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 +%} + +%% +"//".* {printf("COMMENT\n");} + +f[ \t][a-zA-Z][a-zA-Z0-9]* {printf("floatdcl id\n");} +i[ \t][a-zA-Z][a-zA-Z0-9]* {printf("intdcl id\n");} + +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][0-9]+ {printf("id assign inum\n");} + +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\+[ \t][0-9]+\.[0-9]+ {printf("id assign id plus fnum\n");} +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*-[ \t][0-9]+\.[0-9]+ {printf("id assign id minus fnum\n");} +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\*[ \t][0-9]+\.[0-9]+ {printf("id assign id times fnum\n");} +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\/[ \t][0-9]+\.[0-9]+ {printf("id assign id over fnum\n");} + +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\+[ \t][0-9]+ {printf("id assign id plus inum\n");} +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*-[ \t][0-9]+ {printf("id assign id minus inum\n");} +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\*[ \t][0-9]+ {printf("id assign id times inum\n");} +[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\/[ \t][0-9]+ {printf("id assign id over inum\n");} + +p[ \t][a-zA-Z][a-zA-Z0-9]* {printf("print id\n"); } +[ \t\n] {/* whitespace */ } + +%% + +int main(int argc, char **argv) { + FILE *fd; + if (argc == 2) + { + if (!(fd = fopen(argv[1], "r"))) + { + perror("Error: "); + return (-1); + } + yyset_in(fd); + yylex(); + fclose(fd); + } + else + printf("Usage: a.out filename\n"); + return (0); +} From 32f3db38630b5b60fe6f34b921d198385ce71f27 Mon Sep 17 00:00:00 2001 From: BoJavs Date: Tue, 29 Apr 2025 19:41:22 -0600 Subject: [PATCH 2/2] Declared variables for solution --- labs/04/lex3.1/example.ac | 12 ++++++------ labs/04/lex3.1/lex.l | 31 +++++++++++++++++++------------ 2 files changed, 25 insertions(+), 18 deletions(-) diff --git a/labs/04/lex3.1/example.ac b/labs/04/lex3.1/example.ac index 9fbf308c..b8daeea4 100644 --- a/labs/04/lex3.1/example.ac +++ b/labs/04/lex3.1/example.ac @@ -1,6 +1,6 @@ -//FWBU5F1Z96 -f n -i m -r = 93 -c = i + 71 -p w +//5Z2K793IIA +f u +i y +t = 76 +z = i - 62 +p e diff --git a/labs/04/lex3.1/lex.l b/labs/04/lex3.1/lex.l index 61a2bfce..e82bc551 100644 --- a/labs/04/lex3.1/lex.l +++ b/labs/04/lex3.1/lex.l @@ -2,25 +2,32 @@ #include %} +VARIABLE [a-zA-Z][a-zA-Z0-9]* +INT [0-9]+ +FLOAT [0-9]+\.[0-9]+ +FLOAT_DECLARATION "f" +INT_DECLARATION "i" +PRINT "p" + %% "//".* {printf("COMMENT\n");} -f[ \t][a-zA-Z][a-zA-Z0-9]* {printf("floatdcl id\n");} -i[ \t][a-zA-Z][a-zA-Z0-9]* {printf("intdcl id\n");} +{FLOAT_DECLARATION}[ \t]{VARIABLE} {printf("floatdcl id\n");} +{INT_DECLARATION}[ \t]{VARIABLE} {printf("intdcl id\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][0-9]+ {printf("id assign inum\n");} +{VARIABLE}[ \t]=[ \t]{INT} {printf("id assign inum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\+[ \t][0-9]+\.[0-9]+ {printf("id assign id plus fnum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*-[ \t][0-9]+\.[0-9]+ {printf("id assign id minus fnum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\*[ \t][0-9]+\.[0-9]+ {printf("id assign id times fnum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\/[ \t][0-9]+\.[0-9]+ {printf("id assign id over fnum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*\+[ \t]{FLOAT} {printf("id assign id plus fnum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*-[ \t]{FLOAT} {printf("id assign id minus fnum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*\*[ \t]{FLOAT} {printf("id assign id times fnum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*\/[ \t]{FLOAT} {printf("id assign id over fnum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\+[ \t][0-9]+ {printf("id assign id plus inum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*-[ \t][0-9]+ {printf("id assign id minus inum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\*[ \t][0-9]+ {printf("id assign id times inum\n");} -[a-zA-Z][a-zA-Z0-9]*[ \t]=[ \t][a-zA-Z][a-zA-Z0-9]*[ \t]*\/[ \t][0-9]+ {printf("id assign id over inum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*\+[ \t]{INT} {printf("id assign id plus inum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*-[ \t]{INT} {printf("id assign id minus inum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*\*[ \t]{INT} {printf("id assign id times inum\n");} +{VARIABLE}[ \t]=[ \t]{VARIABLE}[ \t]*\/[ \t]{INT} {printf("id assign id over inum\n");} -p[ \t][a-zA-Z][a-zA-Z0-9]* {printf("print id\n"); } +{PRINT}[ \t]{VARIABLE} {printf("print id\n"); } [ \t\n] {/* whitespace */ } %%