X-Git-Url: https://git.piment-noir.org/?p=TP_AL_C.git;a=blobdiff_plain;f=lexer%2Fsyntactic_analyzer.c;h=65997ddfed47b40dad0ef4008599cbd8cb2a5828;hp=ddef90b12707dc5f09009e2d62f182a46899cd0c;hb=15ad4b5ab7b62ce2e966730ccd1932877d658b66;hpb=e3e95680fb0e3c5882991b24f6dd5dbb1a59e87e diff --git a/lexer/syntactic_analyzer.c b/lexer/syntactic_analyzer.c index ddef90b..65997dd 100644 --- a/lexer/syntactic_analyzer.c +++ b/lexer/syntactic_analyzer.c @@ -8,7 +8,7 @@ #include "lexical_analyzer.h" #include "print_helper.h" -#define PRINT_TOKEN 0 +#define PRINT_TOKEN 1 /* Syntactic analyzer functions implementation */ @@ -19,16 +19,14 @@ static void analyze_TEXT() { fprintf(stdout, "entering %s\n", __func__); #endif if (tokenType == MOT) { - scanner(); + #if PRINT_TOKEN + wprint_ctoken(stdout); + #endif if (target != NULL) { - fputws((const wchar_t*)token[tokenFound].value, target); + fputws((const wchar_t*)tokenValue, target); fputws(L" ", target); } - #if PRINT_TOKEN - wprint_token(stdout); - #endif - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; + scanner(); analyze_TEXT(); } else if (tokenType != MOTCLE && tokenType != NPARA && tokenType != SECTION && \ tokenType != SSECTION && tokenType != FIN) { @@ -46,39 +44,23 @@ static void analyze_P() { fprintf(stdout, "entering %s\n", __func__); #endif if (tokenType == NPARA) { - scanner(); #if PRINT_TOKEN - wprint_token(stdout); + wprint_ctoken(stdout); #endif + scanner(); if (target != NULL) { fputws(L"

\n", target); - fputws((const wchar_t*)token[tokenFound].value, target); - fputws(L" ", target); } - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; - if (tokenType == MOT) { - scanner(); - #if PRINT_TOKEN - wprint_token(stdout); - #endif - if (target != NULL) { - fputws((const wchar_t*)token[tokenFound].value, target); - fputws(L" ", target); - } - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; - analyze_TEXT(); - if (target != NULL) { - fputws(L"\n

\n", target); - } - analyze_P(); + analyze_TEXT(); + if (target != NULL) { + fputws(L"\n

\n", target); + } + analyze_P(); } else if (tokenType != SECTION && tokenType != SSECTION && tokenType != FIN) { fprintf(stderr, "%s follows error on %s\n", __func__, tokenTypestr[tokenType]); fflush(stderr); exit(EXIT_FAILURE); } - } #if DEBUG fprintf(stdout, "leaving %s\n", __func__); #endif @@ -89,31 +71,25 @@ static void analyze_HEAD() { fprintf(stdout, "entering %s\n", __func__); #endif if (tokenType == MOTCLE) { - scanner(); - #if PRINT_TOKEN - wprint_token(stdout); - #endif /* PRINT_TOKEN */ - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; //FIXME: Check if the MOTCLE token value is set to >Titre if (target != NULL) { fputws(L"\n", target); - fputws((const wchar_t*)token[tokenFound].value, target); fputws(L" ", target); } + scanner(); analyze_TEXT(); if (target != NULL) { fputws(L"\n\n", target); } if (tokenType == MOTCLE) { - scanner(); #if PRINT_TOKEN - wprint_token(stdout); + wprint_ctoken(stdout); #endif /* PRINT_TOKEN */ - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; + scanner(); //The text contain the author + fputws(L"", target); } else if (tokenType != NPARA && tokenType != SECTION && tokenType != FIN) { fprintf(stderr, "%s follows error on %s\n", __func__, tokenTypestr[tokenType]); fflush(stderr); @@ -130,21 +106,21 @@ static void analyze_H1() { fprintf(stdout, "entering %s\n", __func__); #endif if (tokenType == SECTION) { - scanner(); #if PRINT_TOKEN - wprint_token(stdout); + wprint_ctoken(stdout); #endif /* PRINT_TOKEN */ if (target != NULL) { fputws(L"

\n", target); - fputws((const wchar_t*)token[tokenFound].value, target); - fputws(L" ", target); } - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; + scanner(); analyze_TEXT(); if (target != NULL) { fputws(L"\n

\n", target); } + } else { + fprintf(stderr, "%s error\n", __func__); + fflush(stderr); + exit(EXIT_FAILURE); } #if DEBUG fprintf(stdout, "leaving %s\n", __func__); @@ -156,17 +132,13 @@ static void analyze_H2() { fprintf(stdout, "entering %s\n", __func__); #endif if (tokenType == SSECTION) { - scanner(); #if PRINT_TOKEN - wprint_token(stdout); + wprint_ctoken(stdout); #endif /* PRINT_TOKEN */ if (target != NULL) { fputws(L"

\n", target); - fputws((const wchar_t*)token[tokenFound].value, target); - fputws(L" ", target); } - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; + scanner(); analyze_TEXT(); if (target != NULL) { fputws(L"\n

\n", target); @@ -181,7 +153,6 @@ static void analyze_S2() { #if DEBUG fprintf(stdout, "entering %s\n", __func__); #endif - //FIXME: This test is probably useless if (tokenType == SSECTION) { analyze_H2(); analyze_P(); @@ -200,7 +171,6 @@ static void analyze_S1() { #if DEBUG fprintf(stdout, "entering %s\n", __func__); #endif - //FIXME: This test is probably useless if (tokenType == SECTION) { analyze_H1(); analyze_P(); @@ -231,13 +201,10 @@ void analyze_AXIOME() { #if DEBUG fprintf(stdout, "entering %s\n", __func__); #endif - scanner(); /* print the lexical analysis result */ #if PRINT_TOKEN - wprint_token(stdout); + wprint_ctoken(stdout); #endif /* PRINT_TOKEN */ - token[tokenFound].type = tokenTypestr[tokenType]; - tokenFound++; if (target != NULL) { fputws(L"\n", target); }