49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
|
#ifndef INCLUDE_CORE_PARSER_H
|
||
|
#define INCLUDE_CORE_PARSER_H
|
||
|
|
||
|
#include <map>
|
||
|
#include <string>
|
||
|
#include <vector>
|
||
|
|
||
|
#include "array.h"
|
||
|
#include "array_value.h"
|
||
|
#include "define_statement.h"
|
||
|
#include "lexer.h"
|
||
|
|
||
|
namespace fex
|
||
|
{
|
||
|
class Parser
|
||
|
{
|
||
|
public:
|
||
|
Parser() = default;
|
||
|
|
||
|
std::vector<DefineStatement> Parse(std::vector<Token> tokens);
|
||
|
std::vector<Array> ParseTopLevelArrays(std::vector<Token> tokens);
|
||
|
std::map<std::string, ArrayValue> ParseTopLevelObjects(std::vector<Token> tokens);
|
||
|
|
||
|
std::map<std::string, int> ReadDefines(const std::string &filename, std::vector<std::string> matching);
|
||
|
|
||
|
private:
|
||
|
int EvaluateExpression(std::vector<Token> tokens);
|
||
|
int ResolveIdentifier();
|
||
|
int ResolveIdentifier(const Token &token);
|
||
|
int GetPrecedence(const Token &token);
|
||
|
bool IsOperator(const Token &token);
|
||
|
bool IsParamMacro();
|
||
|
std::vector<Token> ToPostfix();
|
||
|
DefineStatement ParseDefine();
|
||
|
|
||
|
ArrayValue ParseObject();
|
||
|
|
||
|
Token Peek();
|
||
|
Token Next();
|
||
|
|
||
|
unsigned long index_;
|
||
|
std::vector<Token> tokens_;
|
||
|
|
||
|
std::map<std::string, int> top_level_;
|
||
|
};
|
||
|
} // namespace fex
|
||
|
|
||
|
#endif // INCLUDE_CORE_PARSER_H
|