From 3d18a3b2b4fc5b678c5c8fbf30fd1520e914ed46 Mon Sep 17 00:00:00 2001 From: NolbertoCastro Date: Mon, 28 Apr 2025 20:10:42 -0600 Subject: [PATCH] A01641501-homework-04 Signed-off-by: NolbertoCastro --- labs/04/lex3.1/code_generator.py | 77 +++++++++++++++++++++++++++++++ labs/04/lex3.1/example.ac | 6 +++ labs/04/lex3.1/lex_analaizer.l | 35 ++++++++++++++ labs/04/lex3.1/lex_analizer | Bin 0 -> 53168 bytes 4 files changed, 118 insertions(+) create mode 100644 labs/04/lex3.1/code_generator.py create mode 100644 labs/04/lex3.1/example.ac create mode 100644 labs/04/lex3.1/lex_analaizer.l create mode 100755 labs/04/lex3.1/lex_analizer diff --git a/labs/04/lex3.1/code_generator.py b/labs/04/lex3.1/code_generator.py new file mode 100644 index 00000000..b4ca41d1 --- /dev/null +++ b/labs/04/lex3.1/code_generator.py @@ -0,0 +1,77 @@ +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) \ No newline at end of file diff --git a/labs/04/lex3.1/example.ac b/labs/04/lex3.1/example.ac new file mode 100644 index 00000000..bb5a51b9 --- /dev/null +++ b/labs/04/lex3.1/example.ac @@ -0,0 +1,6 @@ +//MA9NGAKULA +f k +i l +m = 0 +r = r + 13 +p a diff --git a/labs/04/lex3.1/lex_analaizer.l b/labs/04/lex3.1/lex_analaizer.l new file mode 100644 index 00000000..fd7c3485 --- /dev/null +++ b/labs/04/lex3.1/lex_analaizer.l @@ -0,0 +1,35 @@ +%{ +#include +%} +%option noyywrap + +%% +"f"[ \t]+ printf("floatdcl "); +"i"[ \t]+ printf("intdcl "); +"p"[ \t]+ printf("print "); +"=" printf("assign "); +"+" printf("plus "); +"//".* printf("COMMENT "); +[0-9]+\.[0-9]+ printf("fnum "); +[0-9]+ printf("inum "); +[a-z] printf("id "); +[ \t\n]+ /* ignore 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); +} \ No newline at end of file diff --git a/labs/04/lex3.1/lex_analizer b/labs/04/lex3.1/lex_analizer new file mode 100755 index 0000000000000000000000000000000000000000..a699cab1983bd424e4d7959d6125c68ea57c0bb8 GIT binary patch literal 53168 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 N_RZ&ia$Zi_{{eNH!odIl literal 0 HcmV?d00001