Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
FILE *source = NULL, *target = NULL;
struct token_s token[TOKEN_MAX] = {{NULL, {0}}};
FILE *source = NULL, *target = NULL;
struct token_s token[TOKEN_MAX] = {{NULL, {0}}};
+wint_t tokenValue[50] = {0};
unsigned int tokenFound = 0;
const char* tokenTypestr[] = { "MOTCLE", "SECTION", "SSECTION", "NPARA", "MOT", "FIN" };
unsigned int tokenFound = 0;
const char* tokenTypestr[] = { "MOTCLE", "SECTION", "SSECTION", "NPARA", "MOT", "FIN" };
extern struct token_s token[TOKEN_MAX];
extern wint_t c;
extern struct token_s token[TOKEN_MAX];
extern wint_t c;
+extern wint_t tokenValue[50];
extern unsigned int tokenFound;
extern enum TokenType {
extern unsigned int tokenFound;
extern enum TokenType {
unsigned int i = 0;
wchar_t m[6];
unsigned int i = 0;
wchar_t m[6];
}
if (isAlphaNum()) {
token[tokenFound].value[i] = c;
}
if (isAlphaNum()) {
token[tokenFound].value[i] = c;
i++;
c = fgetwc(source);
goto M1;
i++;
c = fgetwc(source);
goto M1;
MC1:
if (c == L'A' && !wcscmp(fgetws(m, 6, source), L"uteur")) {
wcscpy((wchar_t*)token[tokenFound].value, L">Auteur");
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");
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;
}
c = fgetwc(source);
goto MC2;
}
M1:
if (isAlphaNum()) {
token[tokenFound].value[i] = c;
M1:
if (isAlphaNum()) {
token[tokenFound].value[i] = c;
i++;
c = fgetwc(source);
goto M1;
i++;
c = fgetwc(source);
goto M1;
}
if (isAlphaNum()) {
token[tokenFound].value[i] = c;
}
if (isAlphaNum()) {
token[tokenFound].value[i] = c;
i++;
c = fgetwc(source);
goto M1;
i++;
c = fgetwc(source);
goto M1;
return EXIT_SUCCESS;
MOT:
return EXIT_SUCCESS;
MOT:
+ token[tokenFound].value[i] = 0;
+ tokenValue[i] = 0;
tokenType = MOT;
return EXIT_SUCCESS;
tokenType = MOT;
return EXIT_SUCCESS;
fputws(L"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr_FR\" lang=\"fr_FR\">\n",
target);
c = fgetwc(source); // lecture du premier caractere
fputws(L"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr_FR\" lang=\"fr_FR\">\n",
target);
c = fgetwc(source); // lecture du premier caractere
analyze_AXIOME();
fputws(L"</html>\n", target);
}
analyze_AXIOME();
fputws(L"</html>\n", target);
}
#include <stdio.h>
#include <wchar.h>
#include <stdio.h>
#include <wchar.h>
#include "print_helper.h"
#include "global_vars.h"
#include "print_helper.h"
#include "global_vars.h"
+
+void wprint_ctoken(FILE* out_file) {
+ if (tokenType == MOT || tokenType == MOTCLE) {
+ fwprintf(out_file, L"%20s: %ls\n", tokenTypestr[tokenType], tokenValue);
+ } else {
+ fwprintf(out_file, L"%20s\n", tokenTypestr[tokenType]);
+ }
+ fflush(out_file);
+}
void wpr_error(const wchar_t *format, ...);
void wprint_token(FILE* out_file);
void wpr_error(const wchar_t *format, ...);
void wprint_token(FILE* out_file);
+void wprint_ctoken(FILE* out_file);
#endif /* PRINT_HELPER_H_ */
#endif /* PRINT_HELPER_H_ */
#include "lexical_analyzer.h"
#include "print_helper.h"
#include "lexical_analyzer.h"
#include "print_helper.h"
/* Syntactic analyzer functions implementation */
/* Syntactic analyzer functions implementation */
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == MOT) {
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == MOT) {
+ #if PRINT_TOKEN
+ wprint_ctoken(stdout);
+ #endif
- fputws((const wchar_t*)token[tokenFound].value, target);
+ fputws((const wchar_t*)tokenValue, target);
- #if PRINT_TOKEN
- wprint_token(stdout);
- #endif
- token[tokenFound].type = tokenTypestr[tokenType];
- tokenFound++;
analyze_TEXT();
} else if (tokenType != MOTCLE && tokenType != NPARA && tokenType != SECTION && \
tokenType != SSECTION && tokenType != FIN) {
analyze_TEXT();
} else if (tokenType != MOTCLE && tokenType != NPARA && tokenType != SECTION && \
tokenType != SSECTION && tokenType != FIN) {
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == NPARA) {
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == NPARA) {
if (target != NULL) {
fputws(L"<p>\n", target);
if (target != NULL) {
fputws(L"<p>\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</p>\n", target);
- }
- analyze_P();
+ analyze_TEXT();
+ if (target != NULL) {
+ fputws(L"\n</p>\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);
}
} 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
#if DEBUG
fprintf(stdout, "leaving %s\n", __func__);
#endif
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == MOTCLE) {
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"<title>\n", target);
//FIXME: Check if the MOTCLE token value is set to >Titre
if (target != NULL) {
fputws(L"<title>\n", target);
- fputws((const wchar_t*)token[tokenFound].value, target);
analyze_TEXT();
if (target != NULL) {
fputws(L"\n</title>\n", target);
}
if (tokenType == MOTCLE) {
analyze_TEXT();
if (target != NULL) {
fputws(L"\n</title>\n", target);
}
if (tokenType == MOTCLE) {
- token[tokenFound].type = tokenTypestr[tokenType];
- tokenFound++;
//The text contain the author
//The text contain the author
+ fputws(L"<meta name=\"author\" content=\"", target);
+ fputws(L"\">", target);
} else if (tokenType != NPARA && tokenType != SECTION && tokenType != FIN) {
fprintf(stderr, "%s follows error on %s\n", __func__, tokenTypestr[tokenType]);
fflush(stderr);
} else if (tokenType != NPARA && tokenType != SECTION && tokenType != FIN) {
fprintf(stderr, "%s follows error on %s\n", __func__, tokenTypestr[tokenType]);
fflush(stderr);
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == SECTION) {
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == SECTION) {
#endif /* PRINT_TOKEN */
if (target != NULL) {
fputws(L"<h1>\n", target);
#endif /* PRINT_TOKEN */
if (target != NULL) {
fputws(L"<h1>\n", target);
- 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</h1>\n", target);
}
analyze_TEXT();
if (target != NULL) {
fputws(L"\n</h1>\n", target);
}
+ } else {
+ fprintf(stderr, "%s error\n", __func__);
+ fflush(stderr);
+ exit(EXIT_FAILURE);
}
#if DEBUG
fprintf(stdout, "leaving %s\n", __func__);
}
#if DEBUG
fprintf(stdout, "leaving %s\n", __func__);
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == SSECTION) {
fprintf(stdout, "entering %s\n", __func__);
#endif
if (tokenType == SSECTION) {
#endif /* PRINT_TOKEN */
if (target != NULL) {
fputws(L"<h2>\n", target);
#endif /* PRINT_TOKEN */
if (target != NULL) {
fputws(L"<h2>\n", target);
- 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</h2>\n", target);
analyze_TEXT();
if (target != NULL) {
fputws(L"\n</h2>\n", target);
#if DEBUG
fprintf(stdout, "entering %s\n", __func__);
#endif
#if DEBUG
fprintf(stdout, "entering %s\n", __func__);
#endif
- //FIXME: This test is probably useless
if (tokenType == SSECTION) {
analyze_H2();
analyze_P();
if (tokenType == SSECTION) {
analyze_H2();
analyze_P();
#if DEBUG
fprintf(stdout, "entering %s\n", __func__);
#endif
#if DEBUG
fprintf(stdout, "entering %s\n", __func__);
#endif
- //FIXME: This test is probably useless
if (tokenType == SECTION) {
analyze_H1();
analyze_P();
if (tokenType == SECTION) {
analyze_H1();
analyze_P();
#if DEBUG
fprintf(stdout, "entering %s\n", __func__);
#endif
#if DEBUG
fprintf(stdout, "entering %s\n", __func__);
#endif
/* print the lexical analysis result */
#if PRINT_TOKEN
/* print the lexical analysis result */
#if PRINT_TOKEN
- token[tokenFound].type = tokenTypestr[tokenType];
- tokenFound++;
if (target != NULL) {
fputws(L"<head>\n", target);
}
if (target != NULL) {
fputws(L"<head>\n", target);
}