Major code revamping:
[TP_AL_C.git] / lexer / syntactic_analyzer.c
CommitLineData
9ed84d89
JB
1/* Syntactic analyzer */
2
3#include <stdbool.h>
4#include <stdarg.h>
5
6#include "global_vars.h"
7#include "lexical_analyzer.h"
8
9/* Syntactic analyzer functions implementation */
10
11enum TokenType tokenType;
12
13static bool analyze_TEXT() {
14 bool rtval = true;
15 if (tokenType == MOT) {
16 scanner();
17 rtval = analyze_TEXT();
18 } else if (tokenType != MOTCLE && tokenType != NPARA && tokenType != SECTION && \
19 tokenType != SSECTION && tokenType != FIN) {
20 rtval = false;
21 }
22 return rtval;
23}
24
25static bool analyze_P() {
26 bool rtval = true;
27 if (tokenType == NPARA) {
28 scanner();
29 if (tokenType == MOT) {
30 scanner();
31 rtval = analyze_TEXT();
32 rtval = analyze_P();
33 }
34 } else if (tokenType != SECTION && tokenType != SSECTION && tokenType != FIN) {
35 rtval = false;
36 }
37 return rtval;
38}
39
40static bool analyze_HEAD() {
41 bool rtval = true;
42 if (tokenType == MOTCLE) {
43 scanner();
44 rtval = analyze_TEXT();
45 if (tokenType == MOTCLE) {
46 scanner();
47 rtval = analyze_TEXT();
48 } else {
49 rtval = false;
50 }
51 } else {
52 rtval = false;
53 }
54 return rtval;
55}
56
57static bool analyze_H1() {
58 bool rtval = true;
59 if (tokenType == SECTION) {
60 scanner();
61 rtval = analyze_TEXT();
62 } else {
63 rtval = false;
64 }
65 return rtval;
66}
67
68static bool analyze_H2() {
69 bool rtval = true;
70 if (tokenType == SSECTION) {
71 scanner();
72 rtval = analyze_TEXT();
73 } else {
74 rtval = false;
75 }
76 return rtval;
77}
78
79static bool analyze_S2() {
80 bool rtval = true;
81 if (analyze_H2()) {
82 rtval = analyze_P();
83 rtval = analyze_S2();
84 } else if (tokenType != SECTION && tokenType != FIN) {
85 rtval = false;
86 } else {
87 rtval = false;
88 }
89 return rtval;
90}
91
92static bool analyze_S1() {
93 bool rtval = true;
94 if (analyze_H1()) {
95 rtval = analyze_P();
96 rtval = analyze_S2();
97 rtval = analyze_S1();
98 } else if (tokenType != FIN) {
99 rtval = false;
100 } else {
101 rtval = false;
102 }
103 return rtval;
104}
105
106static bool analyze_BODY() {
107 bool rtval = true;
108 rtval = analyze_P();
109 rtval = analyze_S1();
110 return rtval;
111}
112
113bool analyze_AXIOME() {
114 bool rtval = true;
115 scanner();
116 rtval = analyze_HEAD();
117 rtval = analyze_BODY();
118 if (tokenType != FIN) {
119 rtval = false;
120 }
121 return rtval;
122}