Line data Source code
1 : #ifndef TOP_DOWN_H
2 : #define TOP_DOWN_H
3 :
4 : #include "../builder.h"
5 : #include "../../tables/typeTable/typeTable.h"
6 : #include "parser.h"
7 : #include <expected>
8 : #include <memory>
9 : #include <variant>
10 :
11 : namespace nicole {
12 :
13 : class TopDown final : public Parser {
14 : private:
15 : [[nodiscard]] const std::expected<std::shared_ptr<AST_BODY>, Error>
16 : parseStart() const noexcept;
17 :
18 : [[nodiscard]] const std::expected<std::shared_ptr<Type>, Error>
19 : parseType() const noexcept;
20 :
21 : [[nodiscard]] const std::expected<std::shared_ptr<Type>, Error>
22 : parsePrimaryType() const noexcept;
23 :
24 : [[nodiscard]] const std::expected<std::vector<GenericParameter>, Error>
25 : parseGenerics() const noexcept;
26 :
27 : [[nodiscard]] const std::expected<std::vector<std::shared_ptr<Type>>, Error>
28 : parseReplacementOfGenerics() const noexcept;
29 :
30 : [[nodiscard]] const std::expected<std::shared_ptr<AST_BODY>, Error>
31 : parseBody() const noexcept;
32 :
33 : [[nodiscard]] const std::expected<std::shared_ptr<AST_STATEMENT>, Error>
34 : parseStatement() const noexcept;
35 :
36 : [[nodiscard]] const std::expected<std::shared_ptr<AST_ENUM>, Error>
37 : parseEnum() const noexcept;
38 :
39 : [[nodiscard]] const std::expected<std::shared_ptr<AST_ENUM_ACCESS>, Error>
40 : parseEnumAccess() const noexcept;
41 :
42 : [[nodiscard]] const std::expected<std::shared_ptr<AST_STRUCT>, Error>
43 : parseStructDecl() const noexcept;
44 :
45 : [[nodiscard]] const std::expected<std::shared_ptr<AST_CONSTRUCTOR_DECL>,
46 : Error>
47 : parseConstructorDecl(const std::string &id_returnType, const std::shared_ptr<Type>& fatherType) const noexcept;
48 :
49 : [[nodiscard]] const std::expected<std::shared_ptr<AST_DESTRUCTOR_DECL>, Error>
50 : parseDestructorDecl(const std::string &id) const noexcept;
51 :
52 : [[nodiscard]] const std::expected<std::shared_ptr<AST_METHOD_DECL>, Error>
53 : parseMethodDecl(const bool isVirtual) const noexcept;
54 :
55 : [[nodiscard]] const std::expected<std::shared_ptr<AST_DELETE>, Error>
56 : parseDelete() const noexcept;
57 :
58 : [[nodiscard]] const std::expected<std::shared_ptr<AST_FUNC_DECL>, Error>
59 : parseFuncDecl() const noexcept;
60 :
61 : [[nodiscard]] const std::expected<std::shared_ptr<AST_RETURN>, Error>
62 : parseReturn() const noexcept;
63 :
64 : [[nodiscard]] const std::expected<std::shared_ptr<AST_IMPORT>, Error>
65 : parseImport() const noexcept;
66 :
67 : [[nodiscard]] const std::expected<std::shared_ptr<AST_PRINT>, Error>
68 : parsePrint() const noexcept;
69 :
70 : [[nodiscard]] const std::expected<std::shared_ptr<AST_WHILE>, Error>
71 : parseWhile() const noexcept;
72 :
73 : [[nodiscard]] const std::expected<std::shared_ptr<AST_FOR>, Error>
74 : parseFor() const noexcept;
75 :
76 : [[nodiscard]] const std::expected<std::shared_ptr<AST_PASS>, Error>
77 : parsePass() const noexcept;
78 :
79 : [[nodiscard]] const std::expected<std::shared_ptr<AST_STOP>, Error>
80 : parseStop() const noexcept;
81 :
82 : [[nodiscard]] const std::expected<std::shared_ptr<AST_DO_WHILE>, Error>
83 : parseDoWhile() const noexcept;
84 :
85 : [[nodiscard]] const std::expected<std::shared_ptr<AST_IF>, Error>
86 : parseIf() const noexcept;
87 :
88 : [[nodiscard]] const std::expected<std::shared_ptr<AST_ELSE_IF>, Error>
89 : parseElseIf() const noexcept;
90 :
91 : [[nodiscard]] const std::expected<std::shared_ptr<AST_SWITCH>, Error>
92 : parseSwitch() const noexcept;
93 :
94 : [[nodiscard]] const std::expected<std::shared_ptr<AST_CASE>, Error>
95 : parseCase() const noexcept;
96 :
97 : [[nodiscard]] const std::expected<std::shared_ptr<AST_DEFAULT>, Error>
98 : parseDefault() const noexcept;
99 :
100 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
101 : parseAssignment(const bool insideFor) const noexcept;
102 :
103 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
104 : parseVarDecl(const bool insideFor) const noexcept;
105 :
106 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
107 : parseTernary() const noexcept;
108 :
109 : [[nodiscard]] const std::expected<std::shared_ptr<AST_CONDITION>, Error>
110 : parseCondition(const bool isInsideFor) const noexcept;
111 :
112 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
113 : parseOr() const noexcept;
114 :
115 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
116 : parseAnd() const noexcept;
117 :
118 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
119 : parseEqual_NotEqual() const noexcept;
120 :
121 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
122 : parseCompare() const noexcept;
123 :
124 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
125 : parseAdd_Sub() const noexcept;
126 :
127 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
128 : parseMult_Div_Module() const noexcept;
129 :
130 : [[nodiscard]] const std::expected<std::shared_ptr<AST>, Error>
131 : parseFactor() const noexcept;
132 :
133 : [[nodiscard]] const std::expected<std::shared_ptr<AST_VECTOR>, Error>
134 : parseVector() const noexcept;
135 :
136 : [[nodiscard]] const std::expected<std::shared_ptr<AST_CHAINED>, Error>
137 : parseChainedExpression() const noexcept;
138 :
139 : [[nodiscard]] const std::expected<Parameters, Error>
140 : parseParams() const noexcept;
141 :
142 : [[nodiscard]] const std::expected<std::vector<std::shared_ptr<AST>>, Error>
143 : parseArguments(std::pair<TokenType, TokenType> delimiters,
144 : const bool canBeEmpty) const noexcept;
145 :
146 : std::expected<std::monostate, Error> tryEat() const noexcept;
147 :
148 : public:
149 : explicit TopDown(const std::shared_ptr<Sintax> &sintax) noexcept
150 0 : : Parser{sintax} {}
151 :
152 : [[nodiscard]] const std::expected<std::shared_ptr<Tree>, Error>
153 : parse(const std::filesystem::path &entryFile) const noexcept override;
154 : };
155 :
156 : } // namespace nicole
157 :
158 : #endif
|