/***********************************************************************
THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY
DEVELOPER: Zihan Chen(vczh)
***********************************************************************/
#include "VlppWorkflowLibrary.h"
#include "VlppWorkflowRuntime.h"
#include "VlppReflection.h"
#include "VlppOS.h"
#include "Vlpp.h"
#include "VlppRegex.h"
#include "VlppParser.h"
/***********************************************************************
.\EXPRESSION\WFEXPRESSION_AST.H
***********************************************************************/
/***********************************************************************
This file is generated by: Vczh Parser Generator
From parser definition:WfExpression.parser.txt
Licensed under https://github.com/vczh-libraries/License
***********************************************************************/
#ifndef VCZH_WORKFLOW_EXPRESSION_WFEXPRESSIONPARSER_AST
#define VCZH_WORKFLOW_EXPRESSION_WFEXPRESSIONPARSER_AST
namespace vl
{
namespace workflow
{
/// Token types. Values of enum items will be used in .
enum class WfParserTokenIndex
{
/// Token EXP: /^
EXP = 0,
/// Token ADD: /+
ADD = 1,
/// Token SUB: -
SUB = 2,
/// Token MUL: /*
MUL = 3,
/// Token DIV: //
DIV = 4,
/// Token MOD: %
MOD = 5,
/// Token JOIN: &
JOIN = 6,
/// Token INTERSECTION: /|
INTERSECTION = 7,
/// Token LE: /</=
LE = 8,
/// Token GE: />/=
GE = 9,
/// Token LT: /<
LT = 10,
/// Token GT: />
GT = 11,
/// Token EQ: /=/=
EQ = 12,
/// Token NE: /!/=
NE = 13,
/// Token ASSIGN: /=
ASSIGN = 14,
/// Token FAILED_THEN: /?/?
FAILED_THEN = 15,
/// Token QUESTION_MARK: /?
QUESTION_MARK = 16,
/// Token SCOPE_DELIMITER: ::
SCOPE_DELIMITER = 17,
/// Token COLON: :
COLON = 18,
/// Token SEMICOLON: ;
SEMICOLON = 19,
/// Token COMMA: ,
COMMA = 20,
/// Token DOT: .
DOT = 21,
/// Token OPEN_ARRAY: /[
OPEN_ARRAY = 22,
/// Token CLOSE_ARRAY: /]
CLOSE_ARRAY = 23,
/// Token OPEN_BRACE: /{
OPEN_BRACE = 24,
/// Token CLOSE_BRACE: /}
CLOSE_BRACE = 25,
/// Token OPEN_BRACKET: /(
OPEN_BRACKET = 26,
/// Token CLOSE_BRACKET: /)
CLOSE_BRACKET = 27,
/// Token AT: @
AT = 28,
/// Token TYPE_VOID: void
TYPE_VOID = 29,
/// Token TYPE_OBJECT: object
TYPE_OBJECT = 30,
/// Token TYPE_INTERFACE: interface
TYPE_INTERFACE = 31,
/// Token TYPE_INT: int
TYPE_INT = 32,
/// Token TYPE_UINT: uint
TYPE_UINT = 33,
/// Token TYPE_FLOAT: float
TYPE_FLOAT = 34,
/// Token TYPE_DOUBLE: double
TYPE_DOUBLE = 35,
/// Token TYPE_STRING: string
TYPE_STRING = 36,
/// Token TYPE_CHAR: char
TYPE_CHAR = 37,
/// Token TYPE_BOOL: bool
TYPE_BOOL = 38,
/// Token KEYWORD_CONST: const
KEYWORD_CONST = 39,
/// Token KEYWORD_SHL: shl
KEYWORD_SHL = 40,
/// Token KEYWORD_SHR: shr
KEYWORD_SHR = 41,
/// Token KEYWORD_XOR: xor
KEYWORD_XOR = 42,
/// Token KEYWORD_AND: and
KEYWORD_AND = 43,
/// Token KEYWORD_OR: or
KEYWORD_OR = 44,
/// Token KEYWORD_NOT: not
KEYWORD_NOT = 45,
/// Token KEYWORD_NULL: null
KEYWORD_NULL = 46,
/// Token KEYWORD_THIS: this
KEYWORD_THIS = 47,
/// Token KEYWORD_TRUE: true
KEYWORD_TRUE = 48,
/// Token KEYWORD_FALSE: false
KEYWORD_FALSE = 49,
/// Token KEYWORD_LET: let
KEYWORD_LET = 50,
/// Token KEYWORD_IN: in
KEYWORD_IN = 51,
/// Token KEYWORD_RANGE: range
KEYWORD_RANGE = 52,
/// Token KEYWORD_NEW: new
KEYWORD_NEW = 53,
/// Token KEYWORD_OF: of
KEYWORD_OF = 54,
/// Token KEYWORD_AS: as
KEYWORD_AS = 55,
/// Token KEYWORD_IS: is
KEYWORD_IS = 56,
/// Token KEYWORD_CAST: cast
KEYWORD_CAST = 57,
/// Token KEYWORD_FUNC: func
KEYWORD_FUNC = 58,
/// Token KEYWORD_TYPEOF: typeof
KEYWORD_TYPEOF = 59,
/// Token KEYWORD_TYPE: type
KEYWORD_TYPE = 60,
/// Token KEYWORD_BIND: bind
KEYWORD_BIND = 61,
/// Token KEYWORD_OBSERVE: observe
KEYWORD_OBSERVE = 62,
/// Token KEYWORD_ON: on
KEYWORD_ON = 63,
/// Token KEYWORD_ATTACH: attach
KEYWORD_ATTACH = 64,
/// Token KEYWORD_DETACH: detach
KEYWORD_DETACH = 65,
/// Token KEYWORD_GOTO: goto
KEYWORD_GOTO = 66,
/// Token KEYWORD_VAR: var
KEYWORD_VAR = 67,
/// Token KEYWORD_BREAK: break
KEYWORD_BREAK = 68,
/// Token KEYWORD_CONTINUE: continue
KEYWORD_CONTINUE = 69,
/// Token KEYWORD_RETURN: return
KEYWORD_RETURN = 70,
/// Token KEYWORD_DELETE: delete
KEYWORD_DELETE = 71,
/// Token KEYWORD_RAISE: raise
KEYWORD_RAISE = 72,
/// Token KEYWORD_IF: if
KEYWORD_IF = 73,
/// Token KEYWORD_ELSE: else
KEYWORD_ELSE = 74,
/// Token KEYWORD_SWITCH: switch
KEYWORD_SWITCH = 75,
/// Token KEYWORD_CASE: case
KEYWORD_CASE = 76,
/// Token KEYWORD_DEFAULT: default
KEYWORD_DEFAULT = 77,
/// Token KEYWORD_WHILE: while
KEYWORD_WHILE = 78,
/// Token KEYWORD_FOR: for
KEYWORD_FOR = 79,
/// Token KEYWORD_REVERSED: reversed
KEYWORD_REVERSED = 80,
/// Token KEYWORD_TRY: try
KEYWORD_TRY = 81,
/// Token KEYWORD_CATCH: catch
KEYWORD_CATCH = 82,
/// Token KEYWORD_FINALLY: finally
KEYWORD_FINALLY = 83,
/// Token KEYWORD_CLASS: class
KEYWORD_CLASS = 84,
/// Token KEYWORD_ENUM: enum
KEYWORD_ENUM = 85,
/// Token KEYWORD_FLAGENUM: flagenum
KEYWORD_FLAGENUM = 86,
/// Token KEYWORD_STRUCT: struct
KEYWORD_STRUCT = 87,
/// Token KEYWORD_PROP: prop
KEYWORD_PROP = 88,
/// Token KEYWORD_EVENT: event
KEYWORD_EVENT = 89,
/// Token KEYWORD_STATIC: static
KEYWORD_STATIC = 90,
/// Token KEYWORD_OVERRIDE: override
KEYWORD_OVERRIDE = 91,
/// Token KEYWORD_USING: using
KEYWORD_USING = 92,
/// Token KEYWORD_NAMESPACE: namespace
KEYWORD_NAMESPACE = 93,
/// Token KEYWORD_MODULE: module
KEYWORD_MODULE = 94,
/// Token KEYWORD_UNIT: unit
KEYWORD_UNIT = 95,
/// Token STATE_MACHINE: /$state_machine
STATE_MACHINE = 96,
/// Token STATE_INPUT: /$state_input
STATE_INPUT = 97,
/// Token STATE_SWITCH: /$switch
STATE_SWITCH = 98,
/// Token STATE_GOTO: /$goto_state
STATE_GOTO = 99,
/// Token STATE_PUSH: /$push_state
STATE_PUSH = 100,
/// Token STATE_DECL: /$state
STATE_DECL = 101,
/// Token COROUTINE_COROUTINE: /$coroutine
COROUTINE_COROUTINE = 102,
/// Token COROUTINE_PAUSE: /$pause
COROUTINE_PAUSE = 103,
/// Token COROUTINE_INTERFACE: /$interface
COROUTINE_INTERFACE = 104,
/// Token COROUTINE_OPERATOR: /$[A-Z]/w*
COROUTINE_OPERATOR = 105,
/// Token COROUTINE_SIGN: /$
COROUTINE_SIGN = 106,
/// Token NAME: [a-zA-Z_]/w*
NAME = 107,
/// Token ORDERED_NAME: /$[0-9]*
ORDERED_NAME = 108,
/// Token FLOAT: /d+./d+
FLOAT = 109,
/// Token INTEGER: /d+
INTEGER = 110,
/// Token STRING: '([^'\\]|\\\.)*'|"([^"\\]|\\\.)*"
STRING = 111,
/// Token FORMATSTRING: /$('([^'\\]|\\\.)*'|"([^"\\]|\\\.)*")
FORMATSTRING = 112,
/// Discardable token SPACE: /s+
SPACE = 113,
/// Discardable token COMMENT: ///*([^*]|/*+[^//])*/*+//
COMMENT = 114,
};
class WfClassMember;
class WfType;
class WfExpression;
class WfStatement;
class WfAttribute;
class WfDeclaration;
class WfPredefinedType;
class WfTopQualifiedType;
class WfReferenceType;
class WfRawPointerType;
class WfSharedPointerType;
class WfNullableType;
class WfEnumerableType;
class WfMapType;
class WfObservableListType;
class WfFunctionType;
class WfChildType;
class WfNamespaceDeclaration;
class WfFunctionArgument;
class WfFunctionDeclaration;
class WfVariableDeclaration;
class WfEventDeclaration;
class WfPropertyDeclaration;
class WfBaseConstructorCall;
class WfConstructorDeclaration;
class WfDestructorDeclaration;
class WfClassDeclaration;
class WfEnumItemIntersection;
class WfEnumItem;
class WfEnumDeclaration;
class WfStructMember;
class WfStructDeclaration;
class WfVirtualCfeDeclaration;
class WfAutoPropertyDeclaration;
class WfCastResultInterfaceDeclaration;
class WfVirtualCseDeclaration;
class WfStateInput;
class WfStateDeclaration;
class WfStateMachineDeclaration;
class WfBreakStatement;
class WfContinueStatement;
class WfReturnStatement;
class WfDeleteStatement;
class WfRaiseExceptionStatement;
class WfIfStatement;
class WfWhileStatement;
class WfTryStatement;
class WfBlockStatement;
class WfGotoStatement;
class WfVariableStatement;
class WfExpressionStatement;
class WfVirtualCseStatement;
class WfForEachStatement;
class WfSwitchCase;
class WfSwitchStatement;
class WfCoProviderStatement;
class WfCoroutineStatement;
class WfCoPauseStatement;
class WfCoOperatorStatement;
class WfStateMachineStatement;
class WfStateSwitchArgument;
class WfStateSwitchCase;
class WfStateSwitchStatement;
class WfStateInvokeStatement;
class WfThisExpression;
class WfTopQualifiedExpression;
class WfReferenceExpression;
class WfOrderedNameExpression;
class WfOrderedLambdaExpression;
class WfMemberExpression;
class WfChildExpression;
class WfLiteralExpression;
class WfFloatingExpression;
class WfIntegerExpression;
class WfStringExpression;
class WfUnaryExpression;
class WfBinaryExpression;
class WfLetVariable;
class WfLetExpression;
class WfIfExpression;
class WfRangeExpression;
class WfSetTestingExpression;
class WfConstructorArgument;
class WfConstructorExpression;
class WfInferExpression;
class WfTypeCastingExpression;
class WfTypeTestingExpression;
class WfTypeOfTypeExpression;
class WfTypeOfExpressionExpression;
class WfAttachEventExpression;
class WfDetachEventExpression;
class WfObserveExpression;
class WfCallExpression;
class WfFunctionExpression;
class WfNewClassExpression;
class WfNewInterfaceExpression;
class WfVirtualCfeExpression;
class WfFormatExpression;
class WfVirtualCseExpression;
class WfBindExpression;
class WfNewCoroutineExpression;
class WfMixinCastExpression;
class WfExpectedTypeCastExpression;
class WfCoOperatorExpression;
class WfModuleUsingFragment;
class WfModuleUsingNameFragment;
class WfModuleUsingWildCardFragment;
class WfModuleUsingItem;
class WfModuleUsingPath;
class WfModule;
enum class WfClassMemberKind
{
Static,
Override,
Normal,
};
class WfClassMember : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
WfClassMemberKind kind;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfType abstract : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description
{
public:
virtual void Visit(WfPredefinedType* node)=0;
virtual void Visit(WfTopQualifiedType* node)=0;
virtual void Visit(WfReferenceType* node)=0;
virtual void Visit(WfRawPointerType* node)=0;
virtual void Visit(WfSharedPointerType* node)=0;
virtual void Visit(WfNullableType* node)=0;
virtual void Visit(WfEnumerableType* node)=0;
virtual void Visit(WfMapType* node)=0;
virtual void Visit(WfObservableListType* node)=0;
virtual void Visit(WfFunctionType* node)=0;
virtual void Visit(WfChildType* node)=0;
};
virtual void Accept(WfType::IVisitor* visitor)=0;
};
class WfExpression abstract : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description
{
public:
virtual void Visit(WfThisExpression* node)=0;
virtual void Visit(WfTopQualifiedExpression* node)=0;
virtual void Visit(WfReferenceExpression* node)=0;
virtual void Visit(WfOrderedNameExpression* node)=0;
virtual void Visit(WfOrderedLambdaExpression* node)=0;
virtual void Visit(WfMemberExpression* node)=0;
virtual void Visit(WfChildExpression* node)=0;
virtual void Visit(WfLiteralExpression* node)=0;
virtual void Visit(WfFloatingExpression* node)=0;
virtual void Visit(WfIntegerExpression* node)=0;
virtual void Visit(WfStringExpression* node)=0;
virtual void Visit(WfUnaryExpression* node)=0;
virtual void Visit(WfBinaryExpression* node)=0;
virtual void Visit(WfLetExpression* node)=0;
virtual void Visit(WfIfExpression* node)=0;
virtual void Visit(WfRangeExpression* node)=0;
virtual void Visit(WfSetTestingExpression* node)=0;
virtual void Visit(WfConstructorExpression* node)=0;
virtual void Visit(WfInferExpression* node)=0;
virtual void Visit(WfTypeCastingExpression* node)=0;
virtual void Visit(WfTypeTestingExpression* node)=0;
virtual void Visit(WfTypeOfTypeExpression* node)=0;
virtual void Visit(WfTypeOfExpressionExpression* node)=0;
virtual void Visit(WfAttachEventExpression* node)=0;
virtual void Visit(WfDetachEventExpression* node)=0;
virtual void Visit(WfObserveExpression* node)=0;
virtual void Visit(WfCallExpression* node)=0;
virtual void Visit(WfFunctionExpression* node)=0;
virtual void Visit(WfNewClassExpression* node)=0;
virtual void Visit(WfNewInterfaceExpression* node)=0;
virtual void Visit(WfVirtualCfeExpression* node)=0;
virtual void Visit(WfVirtualCseExpression* node)=0;
};
virtual void Accept(WfExpression::IVisitor* visitor)=0;
};
class WfStatement abstract : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description
{
public:
virtual void Visit(WfBreakStatement* node)=0;
virtual void Visit(WfContinueStatement* node)=0;
virtual void Visit(WfReturnStatement* node)=0;
virtual void Visit(WfDeleteStatement* node)=0;
virtual void Visit(WfRaiseExceptionStatement* node)=0;
virtual void Visit(WfIfStatement* node)=0;
virtual void Visit(WfWhileStatement* node)=0;
virtual void Visit(WfTryStatement* node)=0;
virtual void Visit(WfBlockStatement* node)=0;
virtual void Visit(WfGotoStatement* node)=0;
virtual void Visit(WfVariableStatement* node)=0;
virtual void Visit(WfExpressionStatement* node)=0;
virtual void Visit(WfVirtualCseStatement* node)=0;
virtual void Visit(WfCoroutineStatement* node)=0;
virtual void Visit(WfStateMachineStatement* node)=0;
};
virtual void Accept(WfStatement::IVisitor* visitor)=0;
};
class WfAttribute : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::parsing::ParsingToken category;
vl::parsing::ParsingToken name;
vl::Ptr value;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfDeclaration abstract : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description
{
public:
virtual void Visit(WfNamespaceDeclaration* node)=0;
virtual void Visit(WfFunctionDeclaration* node)=0;
virtual void Visit(WfVariableDeclaration* node)=0;
virtual void Visit(WfEventDeclaration* node)=0;
virtual void Visit(WfPropertyDeclaration* node)=0;
virtual void Visit(WfConstructorDeclaration* node)=0;
virtual void Visit(WfDestructorDeclaration* node)=0;
virtual void Visit(WfClassDeclaration* node)=0;
virtual void Visit(WfEnumDeclaration* node)=0;
virtual void Visit(WfStructDeclaration* node)=0;
virtual void Visit(WfVirtualCfeDeclaration* node)=0;
virtual void Visit(WfVirtualCseDeclaration* node)=0;
};
virtual void Accept(WfDeclaration::IVisitor* visitor)=0;
vl::collections::List> attributes;
vl::parsing::ParsingToken name;
vl::Ptr classMember;
};
enum class WfPredefinedTypeName
{
Void,
Object,
Interface,
Int,
UInt,
Float,
Double,
String,
Char,
Bool,
};
class WfPredefinedType : public WfType, vl::reflection::Description
{
public:
WfPredefinedTypeName name;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfTopQualifiedType : public WfType, vl::reflection::Description
{
public:
vl::parsing::ParsingToken name;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfReferenceType : public WfType, vl::reflection::Description
{
public:
vl::parsing::ParsingToken name;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfRawPointerType : public WfType, vl::reflection::Description
{
public:
vl::Ptr element;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfSharedPointerType : public WfType, vl::reflection::Description
{
public:
vl::Ptr element;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfNullableType : public WfType, vl::reflection::Description
{
public:
vl::Ptr element;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfEnumerableType : public WfType, vl::reflection::Description
{
public:
vl::Ptr element;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
enum class WfMapWritability
{
Readonly,
Writable,
};
class WfMapType : public WfType, vl::reflection::Description
{
public:
WfMapWritability writability;
vl::Ptr key;
vl::Ptr value;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfObservableListType : public WfType, vl::reflection::Description
{
public:
vl::Ptr element;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfFunctionType : public WfType, vl::reflection::Description
{
public:
vl::Ptr result;
vl::collections::List> arguments;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfChildType : public WfType, vl::reflection::Description
{
public:
vl::Ptr parent;
vl::parsing::ParsingToken name;
void Accept(WfType::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfNamespaceDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
vl::collections::List> declarations;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfFunctionArgument : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::collections::List> attributes;
vl::parsing::ParsingToken name;
vl::Ptr type;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
enum class WfFunctionAnonymity
{
Named,
Anonymous,
};
class WfFunctionDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
WfFunctionAnonymity anonymity;
vl::collections::List> arguments;
vl::Ptr returnType;
vl::Ptr statement;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfVariableDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
vl::Ptr type;
vl::Ptr expression;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfEventDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
vl::collections::List> arguments;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfPropertyDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
vl::Ptr type;
vl::parsing::ParsingToken getter;
vl::parsing::ParsingToken setter;
vl::parsing::ParsingToken valueChangedEvent;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
enum class WfClassKind
{
Class,
Interface,
};
enum class WfConstructorType
{
Undefined,
SharedPtr,
RawPtr,
};
class WfBaseConstructorCall : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::Ptr type;
vl::collections::List> arguments;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfConstructorDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
WfConstructorType constructorType;
vl::collections::List> baseConstructorCalls;
vl::collections::List> arguments;
vl::Ptr statement;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfDestructorDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
vl::Ptr statement;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfClassDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
WfClassKind kind;
WfConstructorType constructorType;
vl::collections::List> baseTypes;
vl::collections::List> declarations;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
enum class WfEnumKind
{
Normal,
Flag,
};
enum class WfEnumItemKind
{
Constant,
Intersection,
};
class WfEnumItemIntersection : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::parsing::ParsingToken name;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfEnumItem : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::collections::List> attributes;
vl::parsing::ParsingToken name;
WfEnumItemKind kind;
vl::parsing::ParsingToken number;
vl::collections::List> intersections;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfEnumDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
WfEnumKind kind;
vl::collections::List> items;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfStructMember : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::collections::List> attributes;
vl::parsing::ParsingToken name;
vl::Ptr type;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfStructDeclaration : public WfDeclaration, vl::reflection::Description
{
public:
vl::collections::List> members;
void Accept(WfDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfVirtualCfeDeclaration abstract : public WfDeclaration, vl::reflection::Description
{
public:
class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description
{
public:
virtual void Visit(WfAutoPropertyDeclaration* node)=0;
virtual void Visit(WfCastResultInterfaceDeclaration* node)=0;
};
virtual void Accept(WfVirtualCfeDeclaration::IVisitor* visitor)=0;
vl::collections::List> expandedDeclarations;
void Accept(WfDeclaration::IVisitor* visitor)override;
};
enum class WfAPConst
{
Readonly,
Writable,
};
enum class WfAPObserve
{
Observable,
NotObservable,
};
class WfAutoPropertyDeclaration : public WfVirtualCfeDeclaration, vl::reflection::Description
{
public:
vl::Ptr type;
WfAPConst configConst;
WfAPObserve configObserve;
vl::Ptr expression;
void Accept(WfVirtualCfeDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfCastResultInterfaceDeclaration : public WfVirtualCfeDeclaration, vl::reflection::Description
{
public:
vl::Ptr baseType;
vl::Ptr elementType;
void Accept(WfVirtualCfeDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfVirtualCseDeclaration abstract : public WfDeclaration, vl::reflection::Description
{
public:
class IVisitor : public vl::reflection::IDescriptable, vl::reflection::Description
{
public:
virtual void Visit(WfStateMachineDeclaration* node)=0;
};
virtual void Accept(WfVirtualCseDeclaration::IVisitor* visitor)=0;
vl::collections::List> expandedDeclarations;
void Accept(WfDeclaration::IVisitor* visitor)override;
};
class WfStateInput : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::parsing::ParsingToken name;
vl::collections::List> arguments;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfStateDeclaration : public vl::parsing::ParsingTreeCustomBase, vl::reflection::Description
{
public:
vl::parsing::ParsingToken name;
vl::collections::List> arguments;
vl::Ptr statement;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfStateMachineDeclaration : public WfVirtualCseDeclaration, vl::reflection::Description
{
public:
vl::collections::List> inputs;
vl::collections::List> states;
void Accept(WfVirtualCseDeclaration::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfBreakStatement : public WfStatement, vl::reflection::Description
{
public:
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfContinueStatement : public WfStatement, vl::reflection::Description
{
public:
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfReturnStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr expression;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfDeleteStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr expression;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfRaiseExceptionStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr expression;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfIfStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr type;
vl::parsing::ParsingToken name;
vl::Ptr expression;
vl::Ptr trueBranch;
vl::Ptr falseBranch;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfWhileStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr condition;
vl::Ptr statement;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfTryStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr protectedStatement;
vl::parsing::ParsingToken name;
vl::Ptr catchStatement;
vl::Ptr finallyStatement;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfBlockStatement : public WfStatement, vl::reflection::Description
{
public:
vl::collections::List> statements;
vl::parsing::ParsingToken endLabel;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfGotoStatement : public WfStatement, vl::reflection::Description
{
public:
vl::parsing::ParsingToken label;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfVariableStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr variable;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List& tokens);
};
class WfExpressionStatement : public WfStatement, vl::reflection::Description
{
public:
vl::Ptr expression;
void Accept(WfStatement::IVisitor* visitor)override;
static vl::Ptr Convert(vl::Ptr node, const vl::collections::List