11 #include "ExpressionParser2NodeWorker.h"
12 #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; }
39 size_t startPosition = 0;
40 size_t endPosition = 0;
53 BracketsNotAllowedForObjects,
57 MalformedVariableParameter,
58 MalformedObjectParameter,
61 VariableNameCollision,
70 : type(type_), message(message_), location(location_),
71 actualValue(actualValue_), objectName(objectName_){};
74 : type(type_), message(message_), location(position_){};
76 const gd::String &message_,
size_t startPosition_,
78 : type(type_), message(message_),
79 location(startPosition_, endPosition_){};
82 gd::ExpressionParserError::ErrorType GetType()
const {
return type; }
83 const gd::String &GetMessage() {
return message; }
84 const gd::String &GetObjectName() {
return objectName; }
85 const gd::String &GetActualValue() {
return actualValue; }
86 size_t GetStartPosition() {
return location.GetStartPosition(); }
87 size_t GetEndPosition() {
return location.GetEndPosition(); }
90 gd::ExpressionParserError::ErrorType type;
106 std::unique_ptr<ExpressionParserError> diagnostic;
121 worker.OnVisitSubExpressionNode(*
this);
124 std::unique_ptr<ExpressionNode> expression;
135 worker.OnVisitOperatorNode(*
this);
138 std::unique_ptr<ExpressionNode> leftHandSide;
139 std::unique_ptr<ExpressionNode> rightHandSide;
140 gd::String::value_type op;
151 worker.OnVisitUnaryOperatorNode(*
this);
154 std::unique_ptr<ExpressionNode> factor;
155 gd::String::value_type op;
167 worker.OnVisitNumberNode(*
this);
182 worker.OnVisitTextNode(*
this);
209 identifierName(identifierName_),
210 childIdentifierName(
""){};
215 identifierName(identifierName_),
216 childIdentifierName(childIdentifierName_){};
219 worker.OnVisitIdentifierNode(*
this);
246 std::unique_ptr<VariableAccessorOrVariableBracketAccessorNode> child;
267 worker.OnVisitVariableNode(*
this);
272 std::unique_ptr<VariableAccessorOrVariableBracketAccessorNode>
288 worker.OnVisitVariableAccessorNode(*
this);
306 worker.OnVisitVariableBracketAccessorNode(*
this);
309 std::unique_ptr<ExpressionNode> expression;
324 const gd::String &objectFunctionOrBehaviorName_)
326 objectName(objectName_),
327 objectFunctionOrBehaviorName(objectFunctionOrBehaviorName_) {}
332 objectName(objectName_),
333 objectFunctionOrBehaviorName(behaviorName_),
334 behaviorFunctionName(behaviorFunctionName_) {}
337 worker.OnVisitObjectFunctionNameNode(*
this);
376 functionName(functionName_){};
382 objectName(objectName_),
383 functionName(functionName_){};
390 objectName(objectName_),
391 behaviorName(behaviorName_),
392 functionName(functionName_){};
394 virtual void Visit(ExpressionParser2NodeWorker &worker) {
395 worker.OnVisitFunctionCallNode(*
this);
400 std::vector<std::unique_ptr<ExpressionNode>> parameters;
403 ExpressionParserLocation
429 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:33
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:424
The base node, from which all nodes in the tree of an expression inherits from.
Definition: ExpressionParser2Node.h:101
ExpressionParserLocation location
Definition: ExpressionParser2Node.h:107
An error that can be attached to a gd::ExpressionNode.
Definition: ExpressionParser2Node.h:46
Definition: ExpressionParser2Node.h:25
A function call node (either free function, object function or object behavior function)....
Definition: ExpressionParser2Node.h:372
FunctionCallNode(const gd::String &objectName_, const gd::String &functionName_)
Construct an object function call node.
Definition: ExpressionParser2Node.h:379
ExpressionParserLocation objectNameLocation
Location of the object name, if any.
Definition: ExpressionParser2Node.h:406
FunctionCallNode(const gd::String &functionName_)
Construct a free function call node.
Definition: ExpressionParser2Node.h:374
FunctionCallNode(const gd::String &objectName_, const gd::String &behaviorName_, const gd::String &functionName_)
Construct a behavior function call node.
Definition: ExpressionParser2Node.h:386
ExpressionParserLocation objectNameDotLocation
Location of the "." after the object name.
Definition: ExpressionParser2Node.h:408
ExpressionParserLocation openingParenthesisLocation
Location of the "(".
Definition: ExpressionParser2Node.h:415
ExpressionParserLocation functionNameLocation
Location of the function name.
Definition: ExpressionParser2Node.h:404
ExpressionParserLocation behaviorNameNamespaceSeparatorLocation
Definition: ExpressionParser2Node.h:412
ExpressionParserLocation behaviorNameLocation
Location of the behavior name, if any.
Definition: ExpressionParser2Node.h:410
ExpressionParserLocation closingParenthesisLocation
Location of the ")".
Definition: ExpressionParser2Node.h:417
Definition: ExpressionParser2Node.h:236
An identifier node, usually representing an object or a variable with an optional function name or ch...
Definition: ExpressionParser2Node.h:205
ExpressionParserLocation identifierNameDotLocation
Location of the "." after the object or variable name.
Definition: ExpressionParser2Node.h:229
ExpressionParserLocation childIdentifierNameLocation
Definition: ExpressionParser2Node.h:230
ExpressionParserLocation identifierNameLocation
Location of the object or variable name.
Definition: ExpressionParser2Node.h:227
gd::String childIdentifierName
The object function or variable child name.
Definition: ExpressionParser2Node.h:223
gd::String identifierName
The object or variable name.
Definition: ExpressionParser2Node.h:220
Definition: ExpressionParser2Node.h:189
A number node. For example: "123". Its type is always "number".
Definition: ExpressionParser2Node.h:162
The name of a function to call on an object or the behavior For example: "MyObject....
Definition: ExpressionParser2Node.h:322
ExpressionParserLocation behaviorNameNamespaceSeparatorLocation
Definition: ExpressionParser2Node.h:359
gd::String objectFunctionOrBehaviorName
Definition: ExpressionParser2Node.h:341
ExpressionParserLocation objectNameLocation
Location of the object name.
Definition: ExpressionParser2Node.h:349
ExpressionParserLocation behaviorFunctionNameLocation
Definition: ExpressionParser2Node.h:361
ExpressionParserLocation objectNameDotLocation
Location of the "." after the object name.
Definition: ExpressionParser2Node.h:351
gd::String behaviorFunctionName
Definition: ExpressionParser2Node.h:344
ExpressionParserLocation objectFunctionOrBehaviorNameLocation
Definition: ExpressionParser2Node.h:352
An operator node. For example: "lhs + rhs".
Definition: ExpressionParser2Node.h:130
Definition: ExpressionParser2Node.h:116
A text node. For example: "Hello World". Its type is always "string".
Definition: ExpressionParser2Node.h:178
A unary operator node. For example: "-2".
Definition: ExpressionParser2Node.h:146
A direct accessor to a child variable. Example: MyChild in MyVariable.MyChild.
Definition: ExpressionParser2Node.h:283
Definition: ExpressionParser2Node.h:243
A bracket accessor to a child variable. Example: ["MyChild"] (in MyVariable["MyChild"]).
Definition: ExpressionParser2Node.h:301
A variable, or object variable, with bracket accessor or at least 2 "dot" accessors.
Definition: ExpressionParser2Node.h:262