From bef11c09841dc0f21dd7430b40777443b4fe2324 Mon Sep 17 00:00:00 2001 From: Xawirses Date: Wed, 9 Mar 2016 11:35:19 +0100 Subject: [PATCH] Refonte du CLI --- src/compilateur-l.c | 106 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 83 insertions(+), 23 deletions(-) diff --git a/src/compilateur-l.c b/src/compilateur-l.c index 98203dc..dbf8c98 100644 --- a/src/compilateur-l.c +++ b/src/compilateur-l.c @@ -6,41 +6,101 @@ #include "affiche_table_symbole.h" #include "symboles.h" +#define A_LEXI 1 +#define A_SYNT 2 +#define A_ABST 3 +#define A_SYMB 4 + extern int uniteCourante; extern int afficheSyntaxyque; char yytext[100]; FILE *yyin; +n_prog *p; + +void usage() +{ + printf("Usage:\n"); + printf("./compilateur-l -l fileName\n"); + printf("./compilateur-l -s fileName\n"); + printf("./compilateur-l -a fileName\n"); + printf("./compilateur-l -t fileName\n"); + printf("./compilateur-l fileName\n"); + exit (8); +} -int main(int argc, char **argv) { - yyin = fopen(argv[2], "r"); - if(argc < 3 && yyin == NULL){ +int main(int argc, char **argv) { + + int sortie = A_SYMB; + while ((argc > 1) && (argv[1][0] == '-')) + { + switch (argv[1][1]) + { + case 'l': + sortie = A_LEXI; + break; + + case 's': + sortie = A_SYNT; + break; + + case 'a': + sortie = A_ABST; + break; + + case 't': + sortie = A_SYMB; + break; + + default: + printf("Wrong Argument: %s\n", argv[1]); + usage(); + } + + ++argv; + --argc; + } + + yyin = fopen(argv[argc-1], "r"); + if(yyin == NULL){ fprintf(stderr, "impossible d'ouvrir le fichier %s\n", argv[2]); exit(1); } - initialise_premiers(); - initialise_suivants(); + switch (sortie) + { + case A_LEXI: + test_yylex_internal(yyin); + break; + + case A_SYNT: + initialise_premiers(); + initialise_suivants(); + afficheSyntaxyque = 1; + uniteCourante = yylex(); + programme(); + break; + + case A_ABST: + initialise_premiers(); + initialise_suivants(); + uniteCourante = yylex(); + p = programme(); + affiche_n_prog(p); + break; + + case A_SYMB: + initialise_premiers(); + initialise_suivants(); + uniteCourante = yylex(); + p = programme(); + affiche_t_table(p); + break; - if (!strcmp(argv[1], "-l")) { - test_yylex_internal(yyin); - } else if (!strcmp(argv[1], "-s")) { - afficheSyntaxyque = 1; - - uniteCourante = yylex(); - programme(); - } else if (!strcmp(argv[1], "-a")) { - uniteCourante = yylex(); - n_prog *p = programme(); - affiche_n_prog(p); - } else if (!strcmp(argv[1], "-t")) { - uniteCourante = yylex(); - n_prog *p = programme(); - affiche_t_table(p); - } else { - fprintf(stderr, "option Inconue"); - exit(1); + default: + printf("Wrong Argument\n"); + usage(); } uniteCourante = yylex();