topazc
parser.hpp
Go to the documentation of this file.
1
6
7#pragma once
8#include "../lexer/token.hpp"
9#include "ast.hpp"
10
14class Parser {
15private:
16 std::vector<Token> tokens;
17 size_t tokens_count;
18 uint32_t pos;
19 bool is_debug;
20
21public:
22 Parser(std::vector<Token> t, bool id) : tokens(t), tokens_count(t.size()), pos(0), is_debug(id) {}
23
31 std::vector<AST::StmtPtr> parse();
32
36 void reset();
37
38private:
48 AST::StmtPtr parse_stmt(bool from_for = false);
49
58
67
76
85
94
103
112
121
130
139
148
157
166
175
184
193
202
211
220
229
238
247
256
265
274
283
294 Token peek(int32_t rpos = 0) const;
295
305 bool match(TokenType type);
306
319 Token consume(TokenType type, std::string err_msg, uint32_t line);
320
330
336 void consume_semicolon();
337
348
359
371 AST::ExprPtr create_compound_asgn_operator(std::string var_name);
372
384 AST::ExprPtr create_inc_dec_operator(std::string var_name);
385};
Header file for defining AST tree elements.
void consume_semicolon()
Method for skipping semicolon in the end of statement.
Definition parser.cpp:636
AST::ExprPtr parse_unary_expr()
Method for parsing expression as 'unary'.
Definition parser.cpp:457
AST::ExprPtr parse_expr()
Method for parsing expressions.
Definition parser.cpp:358
AST::StmtPtr parse_func_decl_proto_stmt()
Method for parsing of functions prototypes.
Definition parser.cpp:320
AST::StmtPtr parse_while_cycle_stmt()
Method for parsing of while cycle.
Definition parser.cpp:246
AST::ExprPtr parse_l_or_expr()
Method for parsing expression as 'logical or'.
Definition parser.cpp:371
AST::ExprPtr parse_additive_expr()
Method for parsing expression as 'additive'.
Definition parser.cpp:420
AST::StmtPtr parse_func_call_stmt()
Method for parsing of functions calling.
Definition parser.cpp:185
AST::StmtPtr parse_do_while_cycle_stmt()
Method for parsing of do-while cycle.
Definition parser.cpp:257
AST::StmtPtr parse_if_else_stmt()
Method for parsing of control flow operators (aka if-else).
Definition parser.cpp:224
std::vector< Token > tokens
Definition parser.hpp:16
AST::ExprPtr parse_primary_expr()
Method for parsing expression as 'primary'.
Definition parser.cpp:479
AST::StmtPtr parse_return_stmt()
Method for parsing of 'return'.
Definition parser.cpp:215
AST::StmtPtr parse_use_module_stmt()
Method for parsing of import the module.
Definition parser.cpp:309
AST::StmtPtr parse_var_asgn_stmt()
Method for parsing of variable assignment.
Definition parser.cpp:131
AST::Argument parse_argument()
Method for parsing of function argument.
Definition parser.cpp:201
AST::StmtPtr parse_stmt(bool from_for=false)
Method for parsing only one statement.
Definition parser.cpp:26
AST::Type consume_type()
Method for verifyng the Topaz type by current tokens.
Definition parser.cpp:601
std::vector< AST::StmtPtr > parse()
Method for parsing tokens into AST tree.
Definition parser.cpp:10
AST::StmtPtr parse_var_decl_stmt()
Method for parsing of variable declaration.
Definition parser.cpp:117
AST::ExprPtr create_inc_dec_operator(std::string var_name)
Method for creating increment/decrement operator and returns expression of assignment.
Definition parser.cpp:708
uint32_t pos
Definition parser.hpp:18
bool is_compound_asgn_operator(Token token)
Method for checking whether the passed token is a compound assignment operator.
Definition parser.cpp:673
AST::StmtPtr parse_func_decl_stmt()
Method for parsing of functions declaration.
Definition parser.cpp:152
AST::StmtPtr parse_break_stmt()
Method for parsing of break statement.
Definition parser.cpp:285
bool is_debug
Definition parser.hpp:19
AST::ExprPtr parse_equality_expr()
Method for parsing expression as 'equality'.
Definition parser.cpp:380
AST::ExprPtr parse_comparation_expr()
Method for parsing expression as 'comparation'.
Definition parser.cpp:397
AST::StmtPtr parse_continue_stmt()
Method for parsing of continue statement.
Definition parser.cpp:290
AST::StmtPtr parse_extern_stmt()
Method for parsing of declaration functions prototypes as extern.
Definition parser.cpp:347
size_t tokens_count
Definition parser.hpp:17
AST::ExprPtr parse_l_and_expr()
Method for parsing expression as 'logical and'.
Definition parser.cpp:362
Parser(std::vector< Token > t, bool id)
Definition parser.hpp:22
AST::StmtPtr parse_for_cycle_stmt()
Method for parsing of for cycle.
Definition parser.cpp:269
Token peek(int32_t rpos=0) const
Method for getting token from tokens by parser pos and passed offset.
Definition parser.cpp:576
AST::ExprPtr create_compound_asgn_operator(std::string var_name)
Method for creating compound assignment operator and returns expression of assignment.
Definition parser.cpp:686
AST::ExprPtr parse_multiplicative_expr()
Method for parsing expression as 'multiplicative'.
Definition parser.cpp:437
Token consume(TokenType type, std::string err_msg, uint32_t line)
Method for verifying the type of the current token.
Definition parser.cpp:593
AST::StmtPtr parse_module_stmt()
Method for parsing of module definition.
Definition parser.cpp:295
AST::TypeValue ttype_to_tvalue(TokenType type)
Method for convert type of token to type of Topaz value.
Definition parser.cpp:648
AST::ExprPtr parse_obj_chain_expr()
Method for parsing expresion as chain of objects.
Definition parser.cpp:548
bool match(TokenType type)
Method for skipping the current token if its type is equal to the passed one.
Definition parser.cpp:585
void reset()
Method for resetting all parameters in parser.
Definition parser.cpp:20
std::unique_ptr< Stmt > StmtPtr
Definition ast.hpp:125
TypeValue
Type values enum.
Definition ast.hpp:19
std::unique_ptr< Expr > ExprPtr
Definition ast.hpp:126
Structure for describing the argument (in function or method).
Definition ast.hpp:87
Structure for describing the type.
Definition ast.hpp:37
Token structure.
Definition token.hpp:92
Header file for defining the token.
TokenType
All tokens types.
Definition token.hpp:14