From 4eba85d0bf620b2f488c2cbeee6a84b2e4bf9fbf Mon Sep 17 00:00:00 2001 From: leo Date: Tue, 16 Apr 2024 21:18:24 -0300 Subject: AAAAAAAAAAAAAAAAAAAAAAAAAAAA --- lexical.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 lexical.c (limited to 'lexical.c') diff --git a/lexical.c b/lexical.c new file mode 100644 index 0000000..46ffffb --- /dev/null +++ b/lexical.c @@ -0,0 +1,120 @@ +#include +#include +#include "include/map.h" +#include "include/lexical.h" + +char proximo = '\n'; +int is_EOF = 0; +int linha = 1; // Numero da linha atual) +int identificador_num = 1; + +string_map special_char; +string_map simbolos_especiais; +string_map simbolos_especiais_composto; +string_map simbolos_especiais_composto_negrito; +string_map simbolos_identificadores; +string_map simbolos_numeros; + +void init_simbolos_especiais_compostos_negrito(){ + simbolos_especiais_composto_negrito = init_map(1031); + + insert_map("program", "secn01", simbolos_especiais_composto_negrito); + insert_map("label", "secn02", simbolos_especiais_composto_negrito); + insert_map("var", "secn03", simbolos_especiais_composto_negrito); + insert_map("procedure", "secn04", simbolos_especiais_composto_negrito); + insert_map("function", "secn05", simbolos_especiais_composto_negrito); + insert_map("begin", "secn06", simbolos_especiais_composto_negrito); + insert_map("end", "secn07", simbolos_especiais_composto_negrito); + insert_map("if", "secn08", simbolos_especiais_composto_negrito); + insert_map("then", "secn09", simbolos_especiais_composto_negrito); + insert_map("else", "secn10", simbolos_especiais_composto_negrito); + insert_map("while", "secn11", simbolos_especiais_composto_negrito); + insert_map("do", "secn12", simbolos_especiais_composto_negrito); + insert_map("or", "secn13", simbolos_especiais_composto_negrito); + insert_map("and", "secn14", simbolos_especiais_composto_negrito); + insert_map("div", "secn15", simbolos_especiais_composto_negrito); + insert_map("not", "secn16", simbolos_especiais_composto_negrito); +} + +void init_simbolos_especiais_compostos(){ + simbolos_especiais_composto = init_map(1031); + + insert_map(":=", "sec1", simbolos_especiais_composto); + insert_map("(*", "sec2", simbolos_especiais_composto); + insert_map("*)", "sec3", simbolos_especiais_composto); +} + +int is_caracter(char tmp){ + return (tmp >= 'a' && tmp <= 'z'); +} + +int is_numero(char tmp){ + return (tmp >= '0' && tmp <= '9'); +} + +void init_simbolos_especiais(){ + simbolos_especiais = init_map(1031); + + insert_map(".", "se01", simbolos_especiais); + insert_map(";", "se02", simbolos_especiais); + insert_map(",", "se03", simbolos_especiais); + insert_map("(", "se04", simbolos_especiais); + insert_map(")", "se05", simbolos_especiais); + insert_map(":", "se06", simbolos_especiais); + insert_map("=", "se07", simbolos_especiais); + insert_map("<", "se08", simbolos_especiais); + insert_map(">", "se09", simbolos_especiais); + insert_map("+", "se10", simbolos_especiais); + insert_map("-", "se11", simbolos_especiais); + insert_map("*", "se12", simbolos_especiais); +} + +void init_all_map(){ + init_simbolos_especiais(); + init_simbolos_especiais_compostos(); + init_simbolos_especiais_compostos_negrito(); + + simbolos_identificadores = init_map(1031); + simbolos_numeros = init_map(1031); +} + + +void PROXIMO(FILE *fp){ + if(fscanf(fp, "%c", &proximo) == EOF){ + is_EOF = 1; + return ; + } + printf("%c", proximo); + if(proximo == '\n'){ + PROXIMO(fp); + linha++; + } + + return ; +} + +char* CODIGO(char *cod){ + char *tmp; + if((tmp = get_value(cod, simbolos_especiais)) != NULL){ + return tmp; + } + if((tmp = get_value(cod, simbolos_especiais_composto)) != NULL){ + return tmp; + } + if((tmp = get_value(cod, simbolos_especiais_composto_negrito)) != NULL){ + return tmp; + } + if((tmp = get_value(cod, simbolos_numeros)) != NULL){ + return tmp; + } + if((tmp = get_value(cod, simbolos_identificadores)) != NULL){ + return tmp; + } + + return NULL; +} + +void ERRO(){ + fprintf(stderr, "Erro na linha %d\n", linha); + exit(1); +} -- cgit v1.2.3