Add FIXME comment for MOTCLE matching
[TP_AL_C.git] / lexer / main.c
index 3247e34c93d17bf8f2879b120b62a94941b7501e..8122023c63a6a6ded748ea99eda9cfba89d1e840 100644 (file)
@@ -17,7 +17,7 @@ enum TokenType {
 } tokenType;
 const char* tokenTypestr[] = { "MOTCLE", "SECTION", "SSECTION", "NPARA", "MOT", "FIN" };
 
-/* This looks silly to check for each characters but for debugging, it's just the way to go */
+/* It looks silly to check for each characters but for debugging, it's just the way to go */
 bool istAlpha() {
     if (c == 'a' || c == 'b' || c == 'c' || c == 'd' || c == 'e' || c == 'f' || c == 'g' || \
         c == 'h' || c == 'i' || c == 'j' || c == 'k' || c == 'l' || c == 'm' || c == 'n' || \
@@ -44,9 +44,9 @@ bool isSeparator() {
 }
 
 int scanner() {
-const char* Titre = "Titre";
-const char* Auteur = "Auteur";
-unsigned int j = 0;
+    const char* Titre = "Titre";
+    const char* Auteur = "Auteur";
+    unsigned int j = 0;
 
 // The main loop get the next character
 init:
@@ -56,6 +56,12 @@ init:
         i++;
         goto init;
     }
+    if (c == '\n') {
+        c = fgetc(source);
+        tokenValue[i] = c;
+        i++;
+        goto initLV1;
+    }
     if (c == '>') {
         c = fgetc(source);
         tokenValue[i] = c;
@@ -74,12 +80,6 @@ init:
         i++;
         goto M1;
     }
-    if (c == '\n') {
-        c = fgetc(source);
-        tokenValue[i] = c;
-        i++;
-        goto initLV1;
-    }
     if (c == EOF) {
         goto FIN;
     } else {
@@ -87,6 +87,7 @@ init:
     }
 
 MC1:
+    // FIXME: Partial match need a rewind in the characters extraction from the file 
     if (c == Titre[j] && j < strlen(Titre) - 1) {
         c = fgetc(source);
         tokenValue[i] = c;
@@ -118,7 +119,6 @@ S1SS1:
         goto SECTION;
     }
 
-
 SS2:
     if (isSeparator() || c == EOF) {
         goto SSECTION;
@@ -144,12 +144,18 @@ M1:
     }
 
 initLV1:
-    if (c == '\n' || c == '\t') {
+    if (c == ' ' || c == '\t') {
         c = fgetc(source);
         tokenValue[i] = c;
         i++;
         goto initLV1;
     }
+    if (c == '\n') {
+        c = fgetc(source);
+        tokenValue[i] = c;
+        i++;
+        goto initLV1LV2;
+    }
     if (istAlpha()) {
         c = fgetc(source);
         tokenValue[i] = c;
@@ -168,12 +174,6 @@ initLV1:
         i++;
         goto MC1;
     }
-    if (c == '\n') {
-        c = fgetc(source);
-        tokenValue[i] = c;
-        i++;
-        goto initLV1LV2;
-    }
     if (c == EOF) {
         goto FIN;
     }
@@ -185,6 +185,9 @@ initLV1LV2:
         i++;
         goto initLV1LV2;
     }
+    if (istAlpha()) {
+        goto NPARA;
+    }
     if (c == '>') {
         c = fgetc(source);
         tokenValue[i] = c;
@@ -197,9 +200,6 @@ initLV1LV2:
         i++;
         goto S1SS1;
     }
-    if (istAlpha()) {
-        goto NPARA;
-    }
     if (c == EOF) {
         goto FIN;
     }
@@ -250,7 +250,6 @@ int main (int argc, char const *argv[]) {
 
     do {
         c = fgetc(source); // lecture du caractere suivant du fichier source
-        //fputc(c, target);  // ecrire c dans le fichier target
         tokenValue[i] = c;
         i++;
         int scanrt = scanner();
@@ -263,10 +262,10 @@ int main (int argc, char const *argv[]) {
         } else {
             printf ("Token type found: %s\n", tokenTypestr[tokenType]);
         }
-        // reinit
+        // reinit tokenValue
         i = 0;
         memset(tokenValue, 0, sizeof(tokenValue));
-    } while (c != EOF);    // tant que la fin du fichier n'est pas atteinte
+    } while (c != EOF); // tant que la fin du fichier n'est pas atteinte
 
     if (source != NULL) fclose(source); // fermeture du fichier source
     if (target != NULL) fclose(target); // fermeture du fichier target