PorygonLang/src/Parser/Parser.hpp

56 lines
1.8 KiB
C++
Raw Normal View History

2019-05-20 15:45:03 +00:00
#ifndef PORYGONLANG_PARSER_HPP
#define PORYGONLANG_PARSER_HPP
#include <utility>
#include <vector>
2019-05-20 15:45:03 +00:00
#include "ParsedStatements/ParsedStatement.hpp"
2019-05-21 12:00:14 +00:00
#include "../Script.hpp"
2019-05-20 15:45:03 +00:00
enum class OperatorPrecedence {
No,
LogicalOr,
LogicalAnd,
Equality,
Additive,
Multiplication,
Unary,
};
class Parser {
2019-06-13 16:49:38 +00:00
vector<const IToken*> _tokens;
2019-05-20 15:45:03 +00:00
unsigned int _position;
2019-05-21 12:00:14 +00:00
Script* ScriptData;
2019-05-20 15:45:03 +00:00
2019-06-13 16:49:38 +00:00
const IToken* Peek();
const IToken *PeekAt(int offset);
const IToken* Next();
2019-05-26 12:20:40 +00:00
2019-06-13 16:49:38 +00:00
ParsedStatement* ParseStatement(const IToken* current);
2019-06-14 15:12:27 +00:00
ParsedStatement* ParseVariableAssignment(const IToken *current);
ParsedStatement* ParseIndexAssignment(ParsedExpression *indexer);
ParsedStatement *ParseBlock(const vector<TokenKind>& endTokens, const vector<const ParsedStatement*>& openStatements = {});
2019-06-13 16:49:38 +00:00
ParsedStatement* ParseFunctionDeclaration(const IToken* current);
ParsedStatement *ParseReturnStatement(const IToken *current);
ParsedStatement *ParseIfStatement(const IToken *current);
2019-05-26 12:20:40 +00:00
2019-06-13 16:49:38 +00:00
ParsedExpression* ParseExpression(const IToken* current);
ParsedExpression* ParseBinaryExpression(const IToken* current, OperatorPrecedence parentPrecedence);
ParsedExpression* ParsePrimaryExpression(const IToken* current);
ParsedExpression* ParseParenthesizedExpression(const IToken *current);
2019-06-01 12:56:28 +00:00
ParsedExpression* ParseFunctionCallExpression(ParsedExpression* functionExpression);
ParsedExpression *ParseIndexExpression(ParsedExpression *indexingExpression);
2019-06-13 16:49:38 +00:00
ParsedExpression *ParseTableExpression(const IToken *current);
2019-05-20 15:45:03 +00:00
public:
ParsedScriptStatement* Parse();
2019-06-13 16:49:38 +00:00
explicit Parser(const vector<const IToken*>& tokens, Script* scriptData){
_tokens = tokens;
2019-05-20 15:45:03 +00:00
_position = 0;
2019-05-21 12:00:14 +00:00
ScriptData = scriptData;
2019-05-20 15:45:03 +00:00
}
};
#endif //PORYGONLANG_PARSER_HPP