#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(is_EOF) return; if(fscanf(fp, "%c", &proximo) == EOF){ is_EOF = 1; return ; } if(proximo == '\n'){ printf("\n"); PROXIMO(fp); linha++; printf("linha %d: ", 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(int error_code){ fprintf(stderr, "Erro na linha %d\n", linha); if(error_code == 1) fprintf(stderr, "primerio erro\n"); else fprintf(stderr, "segundo erro\n"); exit(1); }