Avoid filling twice token values.
authorJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 26 Feb 2018 13:46:26 +0000 (14:46 +0100)
committerJérôme Benoit <jerome.benoit@piment-noir.org>
Mon, 26 Feb 2018 13:46:26 +0000 (14:46 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
lexer/lexical_analyzer.c
lexer/main.c
lexer/syntactic_analyzer.c

index 8805a54c13ec0647b306eeffdf8e869e2676c531..32efd0b5af735e648418568d72c43339dae6b10d 100644 (file)
@@ -69,7 +69,6 @@ init:
         goto S1SS1;
     }
     if (isAlphaNum()) {
-        token[tokenFound].value[i] = c;
         tokenValue[i] = c;
         i++;
         c = fgetwc(source);
@@ -82,13 +81,11 @@ 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;
@@ -121,7 +118,6 @@ SSECTION:
 
 M1:
     if (isAlphaNum()) {
-        token[tokenFound].value[i] = c;
         tokenValue[i] = c;
         i++;
         c = fgetwc(source);
@@ -142,7 +138,6 @@ initLV1:
         goto initLV1LV2;
     }
     if (isAlphaNum()) {
-        token[tokenFound].value[i] = c;
         tokenValue[i] = c;
         i++;
         c = fgetwc(source);
@@ -187,8 +182,9 @@ NPARA:
     return EXIT_SUCCESS;
 
 MOT:
-    tokenValue[i] = 0;
     tokenType = MOT;
+    tokenValue[i] = 0;
+    wcscpy((wchar_t*)token[tokenFound].value, (wchar_t*)tokenValue);
     return EXIT_SUCCESS;
 
 MC2:
@@ -199,6 +195,7 @@ MC2:
 
 MOTCLE:
     tokenType = MOTCLE;
+    wcscpy((wchar_t*)token[tokenFound].value, (wchar_t*)tokenValue);
     return EXIT_SUCCESS;
 
 FIN:
@@ -210,7 +207,7 @@ error:
         fwprintf(stderr, L"%s error with token type: %s and value: %ls\n",
                  __func__,
                  tokenTypestr[tokenType],
-                 token[tokenFound].value);
+                 tokenValue);
     } else {
         fwprintf(stderr, L"%s error with token type: %s\n",
                  __func__,
index 40550f5a85d0b2d8935fa00a1b83d3b32e1411a3..24f0a511069fcc65bc344d097efda6b283915020 100644 (file)
@@ -15,6 +15,7 @@ void do_lexical_analysis() {
         scanner();
         wprint_token(target);
         token[tokenFound].type = tokenTypestr[tokenType];
+        wcscpy((wchar_t*)tokenValue, (wchar_t*)token[tokenFound].value);
         tokenFound++;
     } while (tokenType != FIN); // tant que la fin du fichier n'est pas atteinte
 }
index ae3251ae48c4da759f8f0fe02ef88aceefbffbc0..b9787df6976e51eccc1a8d9a1dd7baae08e43e8c 100644 (file)
@@ -216,6 +216,9 @@ void analyze_AXIOME() {
     if (target != NULL) {
         fputws(L"\n<body>\n", target);
     }
+    #if PRINT_TOKEN
+    wprint_ctoken(stdout);
+    #endif /* PRINT_TOKEN */
     if (tokenType != FIN) {
         fprintf(stderr, "%s follows error on %s\n", __func__, tokenTypestr[tokenType]);
         fflush(stderr);