CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
hrydgard

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: hrydgard/ppsspp
Path: blob/master/Common/Math/expression_parser.h
Views: 1401
1
#pragma once
2
3
#include <cstdint>
4
#include <cstddef>
5
#include <string>
6
#include <vector>
7
8
typedef std::pair<uint32_t, uint32_t> ExpressionPair;
9
typedef std::vector<ExpressionPair> PostfixExpression;
10
11
enum ExpressionType
12
{
13
EXPR_TYPE_UINT = 0,
14
EXPR_TYPE_FLOAT = 2,
15
};
16
17
class IExpressionFunctions
18
{
19
public:
20
virtual ~IExpressionFunctions() {}
21
virtual bool parseReference(char* str, uint32_t& referenceIndex) = 0;
22
virtual bool parseSymbol(char* str, uint32_t& symbolValue) = 0;
23
virtual uint32_t getReferenceValue(uint32_t referenceIndex) = 0;
24
virtual ExpressionType getReferenceType(uint32_t referenceIndex) = 0;
25
virtual bool getMemoryValue(uint32_t address, int size, uint32_t& dest, std::string *error) = 0;
26
};
27
28
bool initPostfixExpression(const char* infix, IExpressionFunctions* funcs, PostfixExpression& dest);
29
bool parsePostfixExpression(PostfixExpression& exp, IExpressionFunctions* funcs, uint32_t& dest);
30
bool parseExpression(const char* exp, IExpressionFunctions* funcs, uint32_t& dest);
31
const char* getExpressionError();
32
33