Fix the syntactic analyzer for real.
[TP_AL_C.git] / lexer / lexical_analyzer.c
index 42ab960eab1287665d4802d77a2532a4dcde2723..0d6a7284abb35cb064fd40885d980bfb8c9a74f0 100644 (file)
@@ -22,7 +22,7 @@ static bool isAlphaNum() {
         c == L'\''|| c == L'#' || \
         c == L'0' || c == L'1' || c == L'2' || c == L'3' || c == L'4' || c == L'5' || c == L'6' || \
         c == L'7' || c == L'8' || c == L'9' || \
-        // FIXME: Accentued characters (aka multibytes characters) support is still buggy
+        //FIXME: Accentued characters (aka multibytes characters) support is still buggy
         c == L'à' || c == L'â' || c == L'ç' || c == L'è' || c == L'é' || c == L'î' || c == L'ô' || \
         c == L'ù' || c == L'û' || \
         c == L'À' || c == L'Â' || c == L'Ç' || c == L'È' || c == L'É' || c == L'Î' || c == L'Ô' || \
@@ -47,6 +47,7 @@ static bool isEOF() {
 }
 
 int scanner() {
+    tokenValue[0] = 0;
     unsigned int i = 0;
     wchar_t m[6];
 
@@ -69,6 +70,7 @@ init:
     }
     if (isAlphaNum()) {
         token[tokenFound].value[i] = c;
+        tokenValue[i] = c;
         i++;
         c = fgetwc(source);
         goto M1;
@@ -81,11 +83,13 @@ init:
 MC1:
     if (c == L'A' && !wcscmp(fgetws(m, 6, source), L"uteur")) {
         wcscpy((wchar_t*)token[tokenFound].value, L">Auteur");
+        wcscpy((wchar_t*)tokenValue, L">Auteur");
         c = fgetwc(source);
         goto MC2;
     }
     if (c == L'T' && !wcscmp(fgetws(m, 5, source), L"itre")) {
         wcscpy((wchar_t*)token[tokenFound].value, L">Titre");
+        wcscpy((wchar_t*)tokenValue, L">Titre");
         c = fgetwc(source);
         goto MC2;
     }
@@ -118,6 +122,7 @@ SSECTION:
 M1:
     if (isAlphaNum()) {
         token[tokenFound].value[i] = c;
+        tokenValue[i] = c;
         i++;
         c = fgetwc(source);
         goto M1;
@@ -138,6 +143,7 @@ initLV1:
     }
     if (isAlphaNum()) {
         token[tokenFound].value[i] = c;
+        tokenValue[i] = c;
         i++;
         c = fgetwc(source);
         goto M1;
@@ -181,6 +187,8 @@ NPARA:
     return EXIT_SUCCESS;
 
 MOT:
+    token[tokenFound].value[i] = 0;
+    tokenValue[i] = 0;
     tokenType = MOT;
     return EXIT_SUCCESS;
 
@@ -201,14 +209,15 @@ FIN:
 error:
     if (tokenType == MOT || tokenType == MOTCLE) {
         fwprintf(stderr, L"%s error with token type: %s and value: %ls\n",
-                  __func__,
-                  tokenTypestr[tokenType],
-                  token[tokenFound].value);
+                 __func__,
+                 tokenTypestr[tokenType],
+                 token[tokenFound].value);
     } else {
         fwprintf(stderr, L"%s error with token type: %s\n",
-                  __func__,
-                  tokenTypestr[tokenType]);
+                 __func__,
+                 tokenTypestr[tokenType]);
     }
+    fflush(stderr);
     tokenType = FIN;
     exit(EXIT_FAILURE);
 }