Plasma Engine  2.0
Loading...
Searching...
No Matches
ExpressionParser.h
1#pragma once
2
3#include <Foundation/CodeUtils/Expression/ExpressionAST.h>
4#include <Foundation/CodeUtils/TokenParseUtils.h>
5
6class PL_FOUNDATION_DLL plExpressionParser
7{
8public:
11
13 static const plHashTable<plHashedString, plEnum<plExpressionAST::NodeType>>& GetBuiltinFunctions();
14
15 void RegisterFunction(const plExpression::FunctionDesc& funcDesc);
16 void UnregisterFunction(const plExpression::FunctionDesc& funcDesc);
17
18 struct Options
19 {
20 bool m_bTreatUnknownVariablesAsInputs = false;
21 };
22
24
25private:
26 static constexpr int s_iLowestPrecedence = 20;
27
28 static void RegisterKnownTypes();
29 static void RegisterBuiltinFunctions();
31
32 plResult ParseStatement();
33 plResult ParseType(plStringView sTypeName, plEnum<plExpressionAST::DataType>& out_type);
34 plResult ParseVariableDefinition(plEnum<plExpressionAST::DataType> type);
35 plResult ParseAssignment();
36
37 plExpressionAST::Node* ParseFactor();
38 plExpressionAST::Node* ParseExpression(int iPrecedence = s_iLowestPrecedence);
39 plExpressionAST::Node* ParseUnaryExpression();
40 plExpressionAST::Node* ParseFunctionCall(plStringView sFunctionName);
41 plExpressionAST::Node* ParseSwizzle(plExpressionAST::Node* pExpression);
42
43 bool AcceptStatementTerminator();
44 bool AcceptOperator(plStringView sName);
45 bool AcceptBinaryOperator(plExpressionAST::NodeType::Enum& out_binaryOp, int& out_iOperatorPrecedence, plUInt32& out_uiOperatorLength);
46 plExpressionAST::Node* GetVariable(plStringView sVarName);
47 plExpressionAST::Node* EnsureExpectedType(plExpressionAST::Node* pNode, plExpressionAST::DataType::Enum expectedType);
48 plExpressionAST::Node* Unpack(plExpressionAST::Node* pNode, bool bUnassignedError = true);
49
50 plResult Expect(plStringView sToken, const plToken** pExpectedToken = nullptr);
51 plResult Expect(plTokenType::Enum Type, const plToken** pExpectedToken = nullptr);
52
53 void ReportError(const plToken* pToken, const plFormatString& message);
54
56 plResult CheckOutputs();
57
58 Options m_Options;
59
61 plUInt32 m_uiCurrentToken = 0;
62 plExpressionAST* m_pAST = nullptr;
63
66};
67
68#include <Foundation/CodeUtils/Expression/Implementation/ExpressionParser_inl.h>
This class encapsulates an array and it's size. It is recommended to use this class instead of plain ...
Definition ArrayPtr.h:37
Definition ExpressionAST.h:9
Definition ExpressionParser.h:7
Implements formating of strings with placeholders and formatting options.
Definition FormatString.h:59
Definition HashTable.h:333
plStringView represent a read-only sub-string of a larger string, as it can store a dedicated string ...
Definition StringView.h:34
A custom enum implementation that allows to define the underlying storage type to control its memory ...
Definition Enum.h:37
Describes an expression function and its signature, e.g. how many input parameter it has and their ty...
Definition ExpressionDeclarations.h:72
Definition ExpressionAST.h:195
Definition ExpressionParser.h:19
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
Represents one piece of tokenized text in a document.
Definition Tokenizer.h:37
Enum
Definition Tokenizer.h:13