--- /dev/null
+/* Syntactic analyzer */
+
+#include <stdbool.h>
+#include <stdarg.h>
+
+#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;
+}