39 lines
844 B
C++
39 lines
844 B
C++
|
#include <utility>
|
||
|
|
||
|
#ifndef PORYGONLANG_PARSER_HPP
|
||
|
#define PORYGONLANG_PARSER_HPP
|
||
|
|
||
|
|
||
|
#include "ParsedStatements/ParsedStatement.hpp"
|
||
|
|
||
|
enum class OperatorPrecedence {
|
||
|
No,
|
||
|
LogicalOr,
|
||
|
LogicalAnd,
|
||
|
Equality,
|
||
|
Additive,
|
||
|
Multiplication,
|
||
|
Unary,
|
||
|
};
|
||
|
|
||
|
class Parser {
|
||
|
vector<IToken*> _tokens;
|
||
|
unsigned int _position;
|
||
|
|
||
|
IToken* Peek();
|
||
|
IToken* Next();
|
||
|
ParsedStatement* ParseStatement(IToken* current);
|
||
|
ParsedExpression* ParseExpression(IToken* current);
|
||
|
ParsedExpression* ParseBinaryExpression(IToken* current, OperatorPrecedence parentPrecedence);
|
||
|
ParsedExpression* ParsePrimaryExpression(IToken* current);
|
||
|
public:
|
||
|
ParsedScriptStatement* Parse();
|
||
|
explicit Parser(vector<IToken*> tokens){
|
||
|
_tokens = std::move(tokens);
|
||
|
_position = 0;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif //PORYGONLANG_PARSER_HPP
|