From 82fc1e218a31a2c49785b9995e8163289b644146 Mon Sep 17 00:00:00 2001 From: Rodrigo Chavez Date: Sun, 27 Apr 2025 12:47:30 -0600 Subject: [PATCH] A01635547-homework-04 Signed-off-by: Rodrigo Chavez --- labs/04/Makefile | 30 +++++++++++++++ labs/04/code_generator.py | 78 ++++++++++++++++++++++++++++++++++++++ labs/04/example.ac | 6 +++ labs/04/language_ac.l | 30 +++++++++++++++ labs/04/lexical_scan | Bin 0 -> 53040 bytes 5 files changed, 144 insertions(+) create mode 100644 labs/04/Makefile create mode 100644 labs/04/code_generator.py create mode 100644 labs/04/example.ac create mode 100644 labs/04/language_ac.l create mode 100755 labs/04/lexical_scan diff --git a/labs/04/Makefile b/labs/04/Makefile new file mode 100644 index 00000000..66bdd949 --- /dev/null +++ b/labs/04/Makefile @@ -0,0 +1,30 @@ +LDFLAGS = -L/opt/homebrew/opt/flex/lib +CPPFLAGS = -I/opt/homebrew/opt/flex/include + +# generate +example: code_generator.py + python3 code_generator.py > example.ac + +# compile +gen_lex: + lex language_ac.l + gcc $(CPPFLAGS) $(LDFLAGS) lex.yy.c -o lexical_scan -lfl + +test: example.ac + ./lexical_scan < example.ac +# run lex, then compile lex.yy.c then run lexical_scan +# +stress: + lex language_ac.l + gcc $(CPPFLAGS) $(LDFLAGS) lex.yy.c -o lexical_scan -lfl + python3 code_generator.py --stress + ./lexical_scan < random_code.ac +run: + lex language_ac.l + gcc $(CPPFLAGS) $(LDFLAGS) lex.yy.c -o lexical_scan -lfl + python3 code_generator.py > example.ac + ./lexical_scan < example.ac + +# Limpiar archivos generados +clean: + rm -f lex.yy.c lexical_scan example.ac diff --git a/labs/04/code_generator.py b/labs/04/code_generator.py new file mode 100644 index 00000000..4ae97e16 --- /dev/null +++ b/labs/04/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/example.ac b/labs/04/example.ac new file mode 100644 index 00000000..ab2f9f6b --- /dev/null +++ b/labs/04/example.ac @@ -0,0 +1,6 @@ +//OFKZ5W996B +f q +i q +r = 61 +o4 = f - 98 +p k diff --git a/labs/04/language_ac.l b/labs/04/language_ac.l new file mode 100644 index 00000000..fc39afe0 --- /dev/null +++ b/labs/04/language_ac.l @@ -0,0 +1,30 @@ +%{ +#include +%} + +%option noyywrap + +letter [a-eg-hj-oq-zA-EG-HJ-OQ-Z] +digit [0-9] +number {digit}+ + +%% +\/{2}.* { printf("COMMENT "); } +f { printf("floatdcl "); } +i { printf("intdcl "); } += { printf("assign "); } +\+ { printf("plus "); } +\- { printf("minus "); } +\* { printf("multiplication "); } +\/ { printf("division "); } +p { printf("print "); } +({letter}{digit}*)+ { printf("id "); } +(0|([1-9]{digit}*))\.(({digit}*[1-9])|0) { printf("fnum "); } +{number} { printf("inum "); } +[ \t]+ /* ignore whitespace */ +%% + +int main() { + yylex(); + return 0; +} diff --git a/labs/04/lexical_scan b/labs/04/lexical_scan new file mode 100755 index 0000000000000000000000000000000000000000..1a20455ded013b753ec75bd89c851ef1e2e592e1 GIT binary patch literal 53040 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 literal 0 HcmV?d00001