#include<stdio.h> #include<stdlib.h> #include<string.h> #include"util.h" #include"mcd.h" #include"config.h" #include"word_buffer.h" #include"movements.h" #define LONGUEUR_LIGNE 1000 #define MODE_TAGGER 0 #define MODE_PARSER 1 #define MODE_TAGPARSER 2 void help_message(void) { fprintf(stdout, "help\t print this message\n"); fprintf(stdout, "verbose\t toggle verbose mode\n"); fprintf(stdout, "quit\t quit interpreter\n"); fprintf(stdout, "load_mcd\t load mcd file\n"); fprintf(stdout, "load_mcf\t load mcf file\n"); fprintf(stdout, "open_mcf\t open mcf file\n"); fprintf(stdout, "config_new\t \n"); fprintf(stdout, "config_print\t print configuration\n"); fprintf(stdout, "shift\t perform a shift movement\n"); fprintf(stdout, "shift_undo\t \n"); fprintf(stdout, "parser\t switch to parser mode\n"); fprintf(stdout, "tagger\t switch to tagger mode\n"); fprintf(stdout, "tagparser\t switch to tagparser mode\n"); } int main(int argc, char *argv[]) { char ligne[LONGUEUR_LIGNE]; char commande[LONGUEUR_LIGNE], argument[LONGUEUR_LIGNE]; int n; mcd *mcd_struct = NULL; char *mcd_filename = NULL; char *mcf_filename = NULL; FILE *mcf_file = NULL; int verbose = 0; //word_buffer *wb = NULL; config *c = NULL; int mode = MODE_PARSER; while(1){ printf("> "); if(fgets(ligne, LONGUEUR_LIGNE, stdin) == NULL) { printf("au revoir !\n"); exit(1); } commande[0] = argument[0] = '\0'; n = sscanf(ligne, "%s %s\n", commande, argument); /* printf("ligne = %s n = %d commande = %s argument = %s\n", ligne, n, commande, argument); */ if(n == -1) continue; if(!strcmp(commande, "quit")){ printf("au revoir !\n"); exit(1); } if(!strcmp(commande, "verbose")){ verbose = (verbose == 0) ? 1 : 0; printf("verbose = %d\n", verbose); continue; } if(!strcmp(commande, "help")){ help_message(); continue; } /* set mode */ if(!strcmp(commande, "parser")){ mode = MODE_PARSER; if(verbose) fprintf(stdout, "mode = parser\n"); continue; } if(!strcmp(commande, "tagger")){ mode = MODE_TAGGER; if(verbose) fprintf(stdout, "mode = tagger\n"); continue; } if(!strcmp(commande, "tagparser")){ mode = MODE_TAGPARSER; if(verbose) fprintf(stdout, "mode = tagparser\n"); continue; } if(!strcmp(commande, "mode")){ if(mode == MODE_PARSER){fprintf(stdout, "parser\n"); continue;} if(mode == MODE_TAGGER){fprintf(stdout, "tagger\n"); continue;} if(mode == MODE_TAGPARSER){fprintf(stdout, "tagparser\n"); continue;} } if(!strcmp(commande, "load_mcd")){ mcd_filename = strdup(argument); mcd_struct = mcd_read(mcd_filename, verbose); continue; } if(!strcmp(commande, "load_mcf")){ mcf_filename = strdup(argument); word_buffer_load_mcf(mcf_filename, mcd_struct); continue; } if(!strcmp(commande, "open_mcf")){ mcf_filename = strdup(argument); mcf_file = myfopen(mcf_filename, "r"); continue; } if(!strcmp(commande, "config_new")){ c = config_new(mcf_file, mcd_struct, 5); continue; } if(!strcmp(commande, "config_print")){ config_print(stdout, c); continue; } /* movements */ if(!strcmp(commande, "shift")){ movement_shift(c, 0); config_print(stdout, c); continue; } if(!strcmp(commande, "shift_undo")){ movement_shift_undo(c); config_print(stdout, c); continue; } } }