Commit | Line | Data |
---|---|---|
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 | ||
11 | enum TokenType tokenType; | |
12 | ||
13 | static 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 | ||
25 | static 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 | ||
40 | static 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 | ||
57 | static 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 | ||
68 | static 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 | ||
79 | static 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 | ||
92 | static 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 | ||
106 | static bool analyze_BODY() { | |
107 | bool rtval = true; | |
108 | rtval = analyze_P(); | |
109 | rtval = analyze_S1(); | |
110 | return rtval; | |
111 | } | |
112 | ||
113 | bool 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 | } |