6 #ifndef GDCORE_EXPRESSIONPARSER2NODES_H
7 #define GDCORE_EXPRESSIONPARSER2NODES_H
12 #include "ExpressionParser2NodeWorker.h"
13 #include "GDCore/String.h"
16 class ObjectsContainer;
18 class ParameterMetadata;
19 class ExpressionMetadata;
20 struct FunctionCallNode;
28 : isValid(
true), startPosition(position), endPosition(position){};
31 startPosition(startPosition_),
32 endPosition(endPosition_){};
33 size_t GetStartPosition()
const {
return startPosition; }
34 size_t GetEndPosition()
const {
return endPosition; }
35 bool IsValid()
const {
return isValid; }
48 virtual bool IsError() {
return false; }
49 virtual const gd::String &GetMessage() {
return noMessage; }
50 virtual size_t GetStartPosition() {
return 0; }
51 virtual size_t GetEndPosition() {
return 0; }
64 : type(type_), message(message_), location(location_){};
68 : type(type_), message(message_), location(position_){};
71 size_t startPosition_,
75 location(startPosition_, endPosition_){};
78 bool IsError()
override {
return true; }
79 const gd::String &GetMessage()
override {
return message; }
80 size_t GetStartPosition()
override {
return location.GetStartPosition(); }
81 size_t GetEndPosition()
override {
return location.GetEndPosition(); }
98 std::unique_ptr<ExpressionParserDiagnostic> diagnostic;
113 worker.OnVisitSubExpressionNode(*
this);
116 std::unique_ptr<ExpressionNode> expression;
127 worker.OnVisitOperatorNode(*
this);
130 std::unique_ptr<ExpressionNode> leftHandSide;
131 std::unique_ptr<ExpressionNode> rightHandSide;
132 gd::String::value_type op;
143 worker.OnVisitUnaryOperatorNode(*
this);
146 std::unique_ptr<ExpressionNode> factor;
147 gd::String::value_type op;
159 worker.OnVisitNumberNode(*
this);
174 worker.OnVisitTextNode(*
this);
201 identifierName(identifierName_),
202 childIdentifierName(
""){};
207 identifierName(identifierName_),
208 childIdentifierName(childIdentifierName_){};
211 worker.OnVisitIdentifierNode(*
this);
238 std::unique_ptr<VariableAccessorOrVariableBracketAccessorNode> child;
259 worker.OnVisitVariableNode(*
this);
264 std::unique_ptr<VariableAccessorOrVariableBracketAccessorNode>
280 worker.OnVisitVariableAccessorNode(*
this);
298 worker.OnVisitVariableBracketAccessorNode(*
this);
301 std::unique_ptr<ExpressionNode> expression;
316 const gd::String &objectFunctionOrBehaviorName_)
318 objectName(objectName_),
319 objectFunctionOrBehaviorName(objectFunctionOrBehaviorName_) {}
324 objectName(objectName_),
325 objectFunctionOrBehaviorName(behaviorName_),
326 behaviorFunctionName(behaviorFunctionName_) {}
329 worker.OnVisitObjectFunctionNameNode(*
this);
368 functionName(functionName_){};
374 objectName(objectName_),
375 functionName(functionName_){};
382 objectName(objectName_),
383 behaviorName(behaviorName_),
384 functionName(functionName_){};
386 virtual void Visit(ExpressionParser2NodeWorker &worker) {
387 worker.OnVisitFunctionCallNode(*
this);
392 std::vector<std::unique_ptr<ExpressionNode>> parameters;
395 ExpressionParserLocation
421 worker.OnVisitEmptyNode(*
this);
The interface for any worker class ("visitor" pattern) that want to interact with the nodes of a pars...
Definition: ExpressionParser2NodeWorker.h:36
String represents an UTF8 encoded string.
Definition: String.h:31
Definition: CommonTools.h:24
An empty node, used when parsing failed/a syntax error was encountered and any other node could not m...
Definition: ExpressionParser2Node.h:416
The base node, from which all nodes in the tree of an expression inherits from.
Definition: ExpressionParser2Node.h:93
ExpressionParserLocation location
Definition: ExpressionParser2Node.h:99
A diagnostic that can be attached to a gd::ExpressionNode.
Definition: ExpressionParser2Node.h:46
An error that can be attached to a gd::ExpressionNode.
Definition: ExpressionParser2Node.h:60
Definition: ExpressionParser2Node.h:25
A function call node (either free function, object function or object behavior function)....
Definition: ExpressionParser2Node.h:364
FunctionCallNode(const gd::String &objectName_, const gd::String &functionName_)
Construct an object function call node.
Definition: ExpressionParser2Node.h:371
ExpressionParserLocation objectNameLocation
Location of the object name, if any.
Definition: ExpressionParser2Node.h:398
FunctionCallNode(const gd::String &functionName_)
Construct a free function call node.
Definition: ExpressionParser2Node.h:366
FunctionCallNode(const gd::String &objectName_, const gd::String &behaviorName_, const gd::String &functionName_)
Construct a behavior function call node.
Definition: ExpressionParser2Node.h:378
ExpressionParserLocation objectNameDotLocation
Location of the "." after the object name.
Definition: ExpressionParser2Node.h:400
ExpressionParserLocation openingParenthesisLocation
Location of the "(".
Definition: ExpressionParser2Node.h:407
ExpressionParserLocation functionNameLocation
Location of the function name.
Definition: ExpressionParser2Node.h:396
ExpressionParserLocation behaviorNameNamespaceSeparatorLocation
Definition: ExpressionParser2Node.h:404
ExpressionParserLocation behaviorNameLocation
Location of the behavior name, if any.
Definition: ExpressionParser2Node.h:402
ExpressionParserLocation closingParenthesisLocation
Location of the ")".
Definition: ExpressionParser2Node.h:409
Definition: ExpressionParser2Node.h:228
An identifier node, usually representing an object or a variable with an optional function name or ch...
Definition: ExpressionParser2Node.h:197
ExpressionParserLocation identifierNameDotLocation
Location of the "." after the object or variable name.
Definition: ExpressionParser2Node.h:221
ExpressionParserLocation childIdentifierNameLocation
Definition: ExpressionParser2Node.h:222
ExpressionParserLocation identifierNameLocation
Location of the object or variable name.
Definition: ExpressionParser2Node.h:219
gd::String childIdentifierName
The object function or variable child name.
Definition: ExpressionParser2Node.h:215
gd::String identifierName
The object or variable name.
Definition: ExpressionParser2Node.h:212
Definition: ExpressionParser2Node.h:181
A number node. For example: "123". Its type is always "number".
Definition: ExpressionParser2Node.h:154
The name of a function to call on an object or the behavior For example: "MyObject....
Definition: ExpressionParser2Node.h:314
ExpressionParserLocation behaviorNameNamespaceSeparatorLocation
Definition: ExpressionParser2Node.h:351
gd::String objectFunctionOrBehaviorName
Definition: ExpressionParser2Node.h:333
ExpressionParserLocation objectNameLocation
Location of the object name.
Definition: ExpressionParser2Node.h:341
ExpressionParserLocation behaviorFunctionNameLocation
Definition: ExpressionParser2Node.h:353
ExpressionParserLocation objectNameDotLocation
Location of the "." after the object name.
Definition: ExpressionParser2Node.h:343
gd::String behaviorFunctionName
Definition: ExpressionParser2Node.h:336
ExpressionParserLocation objectFunctionOrBehaviorNameLocation
Definition: ExpressionParser2Node.h:344
An operator node. For example: "lhs + rhs".
Definition: ExpressionParser2Node.h:122
Definition: ExpressionParser2Node.h:108
A text node. For example: "Hello World". Its type is always "string".
Definition: ExpressionParser2Node.h:170
A unary operator node. For example: "-2".
Definition: ExpressionParser2Node.h:138
A direct accessor to a child variable. Example: MyChild in MyVariable.MyChild.
Definition: ExpressionParser2Node.h:275
Definition: ExpressionParser2Node.h:235
A bracket accessor to a child variable. Example: ["MyChild"] (in MyVariable["MyChild"]).
Definition: ExpressionParser2Node.h:293
A variable, or object variable, with bracket accessor or at least 2 "dot" accessors.
Definition: ExpressionParser2Node.h:254