X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lexer%2Fsyntactic_analyzer.c;fp=lexer%2Fsyntactic_analyzer.c;h=e23c130d5bb24c22fa93c966fd9c736c8c4c35db;hb=9ed84d89d23a6198fd4157bfe93424b7b7582332;hp=0000000000000000000000000000000000000000;hpb=7f9d92f6d5a67e5afd2351893abc51d73f1d47d8;p=TP_AL_C.git diff --git a/lexer/syntactic_analyzer.c b/lexer/syntactic_analyzer.c new file mode 100644 index 0000000..e23c130 --- /dev/null +++ b/lexer/syntactic_analyzer.c @@ -0,0 +1,122 @@ +/* Syntactic analyzer */ + +#include +#include + +#include "global_vars.h" +#include "lexical_analyzer.h" + +/* Syntactic analyzer functions implementation */ + +enum TokenType tokenType; + +static bool analyze_TEXT() { + bool rtval = true; + if (tokenType == MOT) { + scanner(); + rtval = analyze_TEXT(); + } else if (tokenType != MOTCLE && tokenType != NPARA && tokenType != SECTION && \ + tokenType != SSECTION && tokenType != FIN) { + rtval = false; + } + return rtval; +} + +static bool analyze_P() { + bool rtval = true; + if (tokenType == NPARA) { + scanner(); + if (tokenType == MOT) { + scanner(); + rtval = analyze_TEXT(); + rtval = analyze_P(); + } + } else if (tokenType != SECTION && tokenType != SSECTION && tokenType != FIN) { + rtval = false; + } + return rtval; +} + +static bool analyze_HEAD() { + bool rtval = true; + if (tokenType == MOTCLE) { + scanner(); + rtval = analyze_TEXT(); + if (tokenType == MOTCLE) { + scanner(); + rtval = analyze_TEXT(); + } else { + rtval = false; + } + } else { + rtval = false; + } + return rtval; +} + +static bool analyze_H1() { + bool rtval = true; + if (tokenType == SECTION) { + scanner(); + rtval = analyze_TEXT(); + } else { + rtval = false; + } + return rtval; +} + +static bool analyze_H2() { + bool rtval = true; + if (tokenType == SSECTION) { + scanner(); + rtval = analyze_TEXT(); + } else { + rtval = false; + } + return rtval; +} + +static bool analyze_S2() { + bool rtval = true; + if (analyze_H2()) { + rtval = analyze_P(); + rtval = analyze_S2(); + } else if (tokenType != SECTION && tokenType != FIN) { + rtval = false; + } else { + rtval = false; + } + return rtval; +} + +static bool analyze_S1() { + bool rtval = true; + if (analyze_H1()) { + rtval = analyze_P(); + rtval = analyze_S2(); + rtval = analyze_S1(); + } else if (tokenType != FIN) { + rtval = false; + } else { + rtval = false; + } + return rtval; +} + +static bool analyze_BODY() { + bool rtval = true; + rtval = analyze_P(); + rtval = analyze_S1(); + return rtval; +} + +bool analyze_AXIOME() { + bool rtval = true; + scanner(); + rtval = analyze_HEAD(); + rtval = analyze_BODY(); + if (tokenType != FIN) { + rtval = false; + } + return rtval; +}