Mana
ParsingDriver.h
Go to the documentation of this file.
1 
8 #pragma once
9 #include "../runner/common/Noncopyable.h"
10 #include "Parser.hpp"
11 #include <memory>
12 
13 namespace mana
14 {
15  class CodeBuffer;
16  class CodeGenerator;
17  class DataBuffer;
18  class GlobalSemanticAnalyzer;
19  class LocalSemanticAnalyzer;
20  class SymbolFactory;
21  class StringPool;
22  class TypeDescriptorFactory;
23 
27  class ParsingDriver final : Noncopyable, public std::enable_shared_from_this<ParsingDriver>
28  {
29  public:
30  ParsingDriver();
31  ParsingDriver(const ParsingDriver&) = delete;
32  ParsingDriver(ParsingDriver&&) noexcept = delete;
33  ParsingDriver& operator=(const ParsingDriver&) = delete;
34  ParsingDriver& operator=(ParsingDriver&&) noexcept = delete;
35  ~ParsingDriver() = default;
36 
37  int32_t Parse() const;
38 
39  const std::shared_ptr<CodeBuffer>& GetCodeBuffer();
40  const std::shared_ptr<CodeGenerator>& GetCodeGenerator();
41  const std::shared_ptr<DataBuffer>& GetDataBuffer();
42  const std::shared_ptr<GlobalSemanticAnalyzer>& GetGlobalSemanticAnalyzer();
43  const std::shared_ptr<SymbolFactory>& GetSymbolFactory();
44  const std::shared_ptr<StringPool>& GetStringPool();
45  const std::shared_ptr<TypeDescriptorFactory>& GetTypeDescriptorFactory();
46 
47  protected:
48  std::shared_ptr<SyntaxNode> Bind(const std::shared_ptr<SyntaxNode>& base, const std::shared_ptr<SyntaxNode>& next);
49 
50  // declarations
51  static std::shared_ptr<SyntaxNode> CreateNativeFunction(const std::shared_ptr<SyntaxNode>& returnExpression, const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& argument);
52  static std::shared_ptr<SyntaxNode> CreateDeclareMemory(const int_t size, const std::shared_ptr<SyntaxNode>& allocateDeclarations);
53  static std::shared_ptr<SyntaxNode> CreateDeclareStaticMemory(const int_t size, const std::shared_ptr<SyntaxNode>& allocateDeclarations);
54 
55  // declaration
56  std::shared_ptr<SyntaxNode> CreateConstantNode(const std::string_view& identifier, const int_t value);
57  std::shared_ptr<SyntaxNode> CreateConstantNode(const std::string_view& identifier, const float_t value);
58  std::shared_ptr<SyntaxNode> CreateConstantNode(const std::string_view& identifier, const std::string_view& text);
59  std::shared_ptr<SyntaxNode> CreateDefineNode(const std::string_view& identifier, const std::string_view& text);
60  static std::shared_ptr<SyntaxNode> CreateUndefineNode(const std::string_view& identifier);
61 
62  // actor
63  static std::shared_ptr<SyntaxNode> CreateActor(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& action);
64  static std::shared_ptr<SyntaxNode> CreatePhantom(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& action);
65  static std::shared_ptr<SyntaxNode> CreateModule(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& action);
66 
67  // action
68  std::shared_ptr<SyntaxNode> CreateAction(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& block);
69  static std::shared_ptr<SyntaxNode> CreateExtend(const std::string_view& identifier);
70 
71  // struct
72  static std::shared_ptr<SyntaxNode> CreateStruct(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& member);
73 
74  // function
75  static std::shared_ptr<SyntaxNode> CreateInternalFunction(const std::shared_ptr<SyntaxNode>& returnExpression, const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& argument, const std::shared_ptr<SyntaxNode>& statement);
76 
77  // variable_type
78  std::shared_ptr<SyntaxNode> CreateActorTypeDescription();
79  static std::shared_ptr<SyntaxNode> CreateTypeDescription(const std::string_view& identifier);
80  static std::shared_ptr<SyntaxNode> CreateTypeDescription(const std::shared_ptr<TypeDescriptor>& typeDescriptor);
81 
82  // block
83  static std::shared_ptr<SyntaxNode> CreateBlock(const std::shared_ptr<SyntaxNode>& statement);
84 
85  // statement
86  static std::shared_ptr<SyntaxNode> CreateIf(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& statementIfTrue, const std::shared_ptr<SyntaxNode>& statementIfFalse);
87  static std::shared_ptr<SyntaxNode> CreateSwitch(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& statement);
88  static std::shared_ptr<SyntaxNode> CreateWhile(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& statement);
89  static std::shared_ptr<SyntaxNode> CreateDoWhile(const std::shared_ptr<SyntaxNode>& statement, const std::shared_ptr<SyntaxNode>& condition);
90  static std::shared_ptr<SyntaxNode> CreateFor(const std::shared_ptr<SyntaxNode>& initializeStatement, const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& iterationExpression, const std::shared_ptr<SyntaxNode>& statement);
91  static std::shared_ptr<SyntaxNode> CreateFor(const std::shared_ptr<SyntaxNode>& declareVariable, const std::shared_ptr<SyntaxNode>& initializeStatement, const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& iterationExpression, const std::shared_ptr<SyntaxNode>& statement);
92  static std::shared_ptr<SyntaxNode> CreateLoop(const std::shared_ptr<SyntaxNode>& statement);
93  static std::shared_ptr<SyntaxNode> CreateLock(const std::shared_ptr<SyntaxNode>& statement);
94  static std::shared_ptr<SyntaxNode> CreateGoto(const std::string_view& labelName);
95  static std::shared_ptr<SyntaxNode> CreateLabel(const std::string_view& labelName);
96  static std::shared_ptr<SyntaxNode> CreateReturn(const std::shared_ptr<SyntaxNode>& expression);
97  static std::shared_ptr<SyntaxNode> CreateRollback(const std::shared_ptr<SyntaxNode>& expression);
98  static std::shared_ptr<SyntaxNode> CreateBreak();
99  static std::shared_ptr<SyntaxNode> CreateContinue();
100  static std::shared_ptr<SyntaxNode> CreateHalt();
101  static std::shared_ptr<SyntaxNode> CreateYield();
102  static std::shared_ptr<SyntaxNode> CreateComply(); // TODO: consider the name
103  static std::shared_ptr<SyntaxNode> CreateRefuse(); // TODO: consider the name
104  static std::shared_ptr<SyntaxNode> CreatePrint(const std::shared_ptr<SyntaxNode>& argument);
105  static std::shared_ptr<SyntaxNode> CreateRequest(const std::shared_ptr<SyntaxNode>& priority, const std::shared_ptr<SyntaxNode>& expression, const std::string_view& actionName);
106  static std::shared_ptr<SyntaxNode> CreateAwaitStart(const std::shared_ptr<SyntaxNode>& priority, const std::shared_ptr<SyntaxNode>& expression, const std::string_view& actionName);
107  static std::shared_ptr<SyntaxNode> CreateAwaitCompletion(const std::shared_ptr<SyntaxNode>& priority, const std::shared_ptr<SyntaxNode>& expression, const std::string_view& actionName);
108  static std::shared_ptr<SyntaxNode> CreateJoin(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
109 
110  // expression
111  static std::shared_ptr<SyntaxNode> CreateAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
112  static std::shared_ptr<SyntaxNode> CreateLogicalAnd(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
113  static std::shared_ptr<SyntaxNode> CreateLogicalOr(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
114  static std::shared_ptr<SyntaxNode> CreateAdd(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
115  static std::shared_ptr<SyntaxNode> CreateSub(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
116  static std::shared_ptr<SyntaxNode> CreateMul(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
117  static std::shared_ptr<SyntaxNode> CreateDiv(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
118  static std::shared_ptr<SyntaxNode> CreateMod(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
119  static std::shared_ptr<SyntaxNode> CreatePow(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
120  static std::shared_ptr<SyntaxNode> CreateAnd(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
121  static std::shared_ptr<SyntaxNode> CreateOr(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
122  static std::shared_ptr<SyntaxNode> CreateXor(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
123  static std::shared_ptr<SyntaxNode> CreateLeftShift(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
124  static std::shared_ptr<SyntaxNode> CreateRightShift(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
125  static std::shared_ptr<SyntaxNode> CreateGreater(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
126  static std::shared_ptr<SyntaxNode> CreateGreaterEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
127  static std::shared_ptr<SyntaxNode> CreateLess(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
128  static std::shared_ptr<SyntaxNode> CreateLessEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
129  static std::shared_ptr<SyntaxNode> CreateEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
130  static std::shared_ptr<SyntaxNode> CreateNotEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
131  static std::shared_ptr<SyntaxNode> CreateAddAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
132  static std::shared_ptr<SyntaxNode> CreateSubAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
133  static std::shared_ptr<SyntaxNode> CreateMulAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
134  static std::shared_ptr<SyntaxNode> CreateDivAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
135  static std::shared_ptr<SyntaxNode> CreateModAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
136  static std::shared_ptr<SyntaxNode> CreatePowAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
137  static std::shared_ptr<SyntaxNode> CreateAndAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
138  static std::shared_ptr<SyntaxNode> CreateOrAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
139  static std::shared_ptr<SyntaxNode> CreateXorAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
140  static std::shared_ptr<SyntaxNode> CreateLeftShiftAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
141  static std::shared_ptr<SyntaxNode> CreateRightShiftAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
142  std::shared_ptr<SyntaxNode> CreateIncrement(const std::shared_ptr<SyntaxNode>& expression);
143  std::shared_ptr<SyntaxNode> CreateDecrement(const std::shared_ptr<SyntaxNode>& expression);
144  static std::shared_ptr<SyntaxNode> CreateExpressionIf(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& trueStatement, const std::shared_ptr<SyntaxNode>& falseStatement);
145 
146  // primary
147  static std::shared_ptr<SyntaxNode> CreateNegative(const std::shared_ptr<SyntaxNode>& expression);
148  static std::shared_ptr<SyntaxNode> CreateNot(const std::shared_ptr<SyntaxNode>& expression);
149  static std::shared_ptr<SyntaxNode> CreateComplement1(const std::shared_ptr<SyntaxNode>& expression);
150  static std::shared_ptr<SyntaxNode> CreateSizeOf(const std::shared_ptr<SyntaxNode>& variableType);
151  static std::shared_ptr<SyntaxNode> CreateCall(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& argument);
152 
153  // constant
154  std::shared_ptr<SyntaxNode> CreatePriority();
155  std::shared_ptr<SyntaxNode> CreateSelf();
156  std::shared_ptr<SyntaxNode> CreateSender();
157  std::shared_ptr<SyntaxNode> CreateNil();
158  std::shared_ptr<SyntaxNode> CreateInteger(const int_t value);
159  std::shared_ptr<SyntaxNode> CreateFloat(const float_t value);
160  std::shared_ptr<SyntaxNode> CreateString(const std::string_view& text);
161 
162  // left hand
163  static std::shared_ptr<SyntaxNode> CreateMemberVariable(const std::shared_ptr<SyntaxNode>& leftHand, const std::string_view& identifier);
164  static std::shared_ptr<SyntaxNode> CreateMemberFunction(const std::shared_ptr<SyntaxNode>& leftHand, const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& argument);
165  static std::shared_ptr<SyntaxNode> CreateArray(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& expression);
166  static std::shared_ptr<SyntaxNode> CreateIdentifier(const std::string_view& identifier);
167 
168  // cases
169  static std::shared_ptr<SyntaxNode> BindCaseNode(const std::shared_ptr<SyntaxNode>& next, const std::shared_ptr<SyntaxNode>& kase);
170 
171  // case
172  static std::shared_ptr<SyntaxNode> CreateSwitchCaseNode(const std::shared_ptr<SyntaxNode>& expression, const std::shared_ptr<SyntaxNode>& statements);
173  static std::shared_ptr<SyntaxNode> CreateSwitchDefaultNode(const std::shared_ptr<SyntaxNode>& statements);
174 
175  // arg_calls
176  static std::shared_ptr<SyntaxNode> CreateArgumentNode(const std::shared_ptr<SyntaxNode>& expression);
177  static std::shared_ptr<SyntaxNode> CreateArgumentNode(const std::shared_ptr<SyntaxNode>& nextArgument, const std::shared_ptr<SyntaxNode>& expression);
178 
179  // arg_decls
180  static std::shared_ptr<SyntaxNode> CreateDeclareArgumentNode(const std::shared_ptr<SyntaxNode>& declareVariable);
181  static std::shared_ptr<SyntaxNode> CreateDeclareArgumentNode(const std::shared_ptr<SyntaxNode>& nextDeclareArgument, const std::shared_ptr<SyntaxNode>& declareVariable);
182 
183  // variable_decl
184  static std::shared_ptr<SyntaxNode> CreateDeclareVariableNode(const std::shared_ptr<SyntaxNode>& variableType, const std::shared_ptr<SyntaxNode>& declarator, const std::shared_ptr<SyntaxNode>& expression);
185 
186  // declarator
187  static std::shared_ptr<SyntaxNode> CreateDeclaratorNode(const std::string_view& identifier);
188  static std::shared_ptr<SyntaxNode> CreateDeclaratorNode(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& variableSizeNode);
189 
190  // variable_size
191  static std::shared_ptr<SyntaxNode> CreateVariableSizeNode(const size_t size);
192  static std::shared_ptr<SyntaxNode> CreateVariableSizeNode(const std::string_view& identifier);
193 
194  private:
195  std::unique_ptr<Parser> mParser;
196 
197  std::shared_ptr<CodeBuffer> mCodeBuffer;
198  std::shared_ptr<CodeGenerator> mCodeGenerator;
199  std::shared_ptr<DataBuffer> mDataBuffer;
200  std::shared_ptr<GlobalSemanticAnalyzer> mGlobalSemanticAnalyzer;
201  std::shared_ptr<LocalSemanticAnalyzer> mLocalSemanticAnalyzer;
202  std::shared_ptr<SymbolFactory> mSymbolFactory;
203  std::shared_ptr<StringPool> mStringPool;
204  std::shared_ptr<TypeDescriptorFactory> mTypeDescriptorFactory;
205 
206  friend class Parser;
207  };
208 }
Definition: CodeBuffer.h:26
Definition: CodeGenerator.h:27
Definition: DataBuffer.h:25
Definition: GlobalSemanticAnalyzer.h:19
Definition: LocalSemanticAnalyzer.h:20
Definition: ParsingDriver.h:28
std::shared_ptr< SyntaxNode > CreateDecrement(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:755
static std::shared_ptr< SyntaxNode > CreateMulAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:665
static std::shared_ptr< SyntaxNode > CreateAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:487
static std::shared_ptr< SyntaxNode > CreateJoin(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:478
static std::shared_ptr< SyntaxNode > CreateDiv(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:535
static std::shared_ptr< SyntaxNode > CreateContinue()
Definition: ParsingDriver.cpp:414
static std::shared_ptr< SyntaxNode > CreateOr(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:567
static std::shared_ptr< SyntaxNode > CreateXorAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:719
static std::shared_ptr< SyntaxNode > CreateInternalFunction(const std::shared_ptr< SyntaxNode > &returnExpression, const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &argument, const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:231
static std::shared_ptr< SyntaxNode > CreateLabel(const std::string_view &labelName)
Definition: ParsingDriver.cpp:387
static std::shared_ptr< SyntaxNode > CreateStruct(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &member)
Definition: ParsingDriver.cpp:222
static std::shared_ptr< SyntaxNode > CreateDeclareStaticMemory(const int_t size, const std::shared_ptr< SyntaxNode > &allocateDeclarations)
Definition: ParsingDriver.cpp:119
static std::shared_ptr< SyntaxNode > CreateAndAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:701
static std::shared_ptr< SyntaxNode > CreateReturn(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:394
static std::shared_ptr< SyntaxNode > CreatePowAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:692
static std::shared_ptr< SyntaxNode > CreateArgumentNode(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:931
static std::shared_ptr< SyntaxNode > CreateLessEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:623
static std::shared_ptr< SyntaxNode > CreateRequest(const std::shared_ptr< SyntaxNode > &priority, const std::shared_ptr< SyntaxNode > &expression, const std::string_view &actionName)
Definition: ParsingDriver.cpp:451
static std::shared_ptr< SyntaxNode > CreateRollback(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:401
static std::shared_ptr< SyntaxNode > CreateLogicalOr(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:503
static std::shared_ptr< SyntaxNode > CreateMod(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:543
static std::shared_ptr< SyntaxNode > CreateModAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:683
static std::shared_ptr< SyntaxNode > CreateIf(const std::shared_ptr< SyntaxNode > &condition, const std::shared_ptr< SyntaxNode > &statementIfTrue, const std::shared_ptr< SyntaxNode > &statementIfFalse)
Definition: ParsingDriver.cpp:281
static std::shared_ptr< SyntaxNode > CreateComplement1(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:788
std::shared_ptr< SyntaxNode > CreateFloat(const float_t value)
Definition: ParsingDriver.cpp:856
static std::shared_ptr< SyntaxNode > CreateGreaterEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:607
static std::shared_ptr< SyntaxNode > CreateActor(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &action)
Definition: ParsingDriver.cpp:180
const std::shared_ptr< GlobalSemanticAnalyzer > & GetGlobalSemanticAnalyzer()
Definition: ParsingDriver.cpp:64
static std::shared_ptr< SyntaxNode > CreateDeclareArgumentNode(const std::shared_ptr< SyntaxNode > &declareVariable)
Definition: ParsingDriver.cpp:947
static std::shared_ptr< SyntaxNode > CreateRightShift(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:591
static std::shared_ptr< SyntaxNode > CreateAnd(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:559
const std::shared_ptr< CodeGenerator > & GetCodeGenerator()
Definition: ParsingDriver.cpp:54
std::shared_ptr< SyntaxNode > CreateActorTypeDescription()
Definition: ParsingDriver.cpp:251
const std::shared_ptr< SymbolFactory > & GetSymbolFactory()
Definition: ParsingDriver.cpp:69
ParsingDriver()
Definition: ParsingDriver.cpp:24
static std::shared_ptr< SyntaxNode > CreateArray(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:891
static std::shared_ptr< SyntaxNode > CreateGreater(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:599
static std::shared_ptr< SyntaxNode > CreateSwitchCaseNode(const std::shared_ptr< SyntaxNode > &expression, const std::shared_ptr< SyntaxNode > &statements)
Definition: ParsingDriver.cpp:915
std::shared_ptr< SyntaxNode > CreateInteger(const int_t value)
Definition: ParsingDriver.cpp:840
static std::shared_ptr< SyntaxNode > CreateLeftShift(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:583
static std::shared_ptr< SyntaxNode > CreateSwitch(const std::shared_ptr< SyntaxNode > &condition, const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:290
static std::shared_ptr< SyntaxNode > CreateNegative(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:774
static std::shared_ptr< SyntaxNode > CreateRefuse()
Definition: ParsingDriver.cpp:438
static std::shared_ptr< SyntaxNode > CreateEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:631
const std::shared_ptr< TypeDescriptorFactory > & GetTypeDescriptorFactory()
Definition: ParsingDriver.cpp:79
std::shared_ptr< SyntaxNode > CreateIncrement(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:746
static std::shared_ptr< SyntaxNode > CreateSizeOf(const std::shared_ptr< SyntaxNode > &variableType)
Definition: ParsingDriver.cpp:795
static std::shared_ptr< SyntaxNode > CreateSwitchDefaultNode(const std::shared_ptr< SyntaxNode > &statements)
Definition: ParsingDriver.cpp:923
std::shared_ptr< SyntaxNode > CreateSender()
Definition: ParsingDriver.cpp:826
ParsingDriver(ParsingDriver &&) noexcept=delete
static std::shared_ptr< SyntaxNode > BindCaseNode(const std::shared_ptr< SyntaxNode > &next, const std::shared_ptr< SyntaxNode > &kase)
Definition: ParsingDriver.cpp:907
static std::shared_ptr< SyntaxNode > CreateAdd(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:511
const std::shared_ptr< StringPool > & GetStringPool()
Definition: ParsingDriver.cpp:74
static std::shared_ptr< SyntaxNode > CreateXor(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:575
static std::shared_ptr< SyntaxNode > CreatePrint(const std::shared_ptr< SyntaxNode > &argument)
Definition: ParsingDriver.cpp:444
static std::shared_ptr< SyntaxNode > CreateCall(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &argument)
Definition: ParsingDriver.cpp:802
static std::shared_ptr< SyntaxNode > CreateWhile(const std::shared_ptr< SyntaxNode > &condition, const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:298
static std::shared_ptr< SyntaxNode > CreateExtend(const std::string_view &identifier)
Definition: ParsingDriver.cpp:214
static std::shared_ptr< SyntaxNode > CreateNotEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:639
static std::shared_ptr< SyntaxNode > CreateUndefineNode(const std::string_view &identifier)
Definition: ParsingDriver.cpp:172
static std::shared_ptr< SyntaxNode > CreateSubAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:656
static std::shared_ptr< SyntaxNode > CreatePow(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:551
static std::shared_ptr< SyntaxNode > CreateFor(const std::shared_ptr< SyntaxNode > &initializeStatement, const std::shared_ptr< SyntaxNode > &condition, const std::shared_ptr< SyntaxNode > &iterationExpression, const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:314
static std::shared_ptr< SyntaxNode > CreateLogicalAnd(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:495
static std::shared_ptr< SyntaxNode > CreateBlock(const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:273
static std::shared_ptr< SyntaxNode > CreateHalt()
Definition: ParsingDriver.cpp:420
static std::shared_ptr< SyntaxNode > CreateDeclareVariableNode(const std::shared_ptr< SyntaxNode > &variableType, const std::shared_ptr< SyntaxNode > &declarator, const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:963
static std::shared_ptr< SyntaxNode > CreateMemberFunction(const std::shared_ptr< SyntaxNode > &leftHand, const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &argument)
Definition: ParsingDriver.cpp:882
std::shared_ptr< SyntaxNode > CreatePriority()
Definition: ParsingDriver.cpp:811
static std::shared_ptr< SyntaxNode > CreateModule(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &action)
Definition: ParsingDriver.cpp:196
const std::shared_ptr< DataBuffer > & GetDataBuffer()
Definition: ParsingDriver.cpp:59
static std::shared_ptr< SyntaxNode > CreateGoto(const std::string_view &labelName)
Definition: ParsingDriver.cpp:380
static std::shared_ptr< SyntaxNode > CreateExpressionIf(const std::shared_ptr< SyntaxNode > &condition, const std::shared_ptr< SyntaxNode > &trueStatement, const std::shared_ptr< SyntaxNode > &falseStatement)
Definition: ParsingDriver.cpp:764
static std::shared_ptr< SyntaxNode > CreateIdentifier(const std::string_view &identifier)
Definition: ParsingDriver.cpp:899
static std::shared_ptr< SyntaxNode > CreateAddAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:647
friend class Parser
Definition: ParsingDriver.h:206
static std::shared_ptr< SyntaxNode > CreateRightShiftAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:737
std::shared_ptr< SyntaxNode > CreateString(const std::string_view &text)
Definition: ParsingDriver.cpp:864
static std::shared_ptr< SyntaxNode > CreateDivAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:674
std::shared_ptr< SyntaxNode > CreateAction(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &block)
Definition: ParsingDriver.cpp:205
std::shared_ptr< SyntaxNode > Bind(const std::shared_ptr< SyntaxNode > &base, const std::shared_ptr< SyntaxNode > &next)
Definition: ParsingDriver.cpp:85
static std::shared_ptr< SyntaxNode > CreateBreak()
Definition: ParsingDriver.cpp:408
static std::shared_ptr< SyntaxNode > CreateTypeDescription(const std::string_view &identifier)
Definition: ParsingDriver.cpp:258
static std::shared_ptr< SyntaxNode > CreateSub(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:519
static std::shared_ptr< SyntaxNode > CreateAwaitStart(const std::shared_ptr< SyntaxNode > &priority, const std::shared_ptr< SyntaxNode > &expression, const std::string_view &actionName)
Definition: ParsingDriver.cpp:460
static std::shared_ptr< SyntaxNode > CreateYield()
Definition: ParsingDriver.cpp:426
static std::shared_ptr< SyntaxNode > CreatePhantom(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &action)
Definition: ParsingDriver.cpp:188
std::shared_ptr< SyntaxNode > CreateConstantNode(const std::string_view &identifier, const int_t value)
Definition: ParsingDriver.cpp:139
static std::shared_ptr< SyntaxNode > CreateComply()
Definition: ParsingDriver.cpp:432
ParsingDriver(const ParsingDriver &)=delete
static std::shared_ptr< SyntaxNode > CreateMemberVariable(const std::shared_ptr< SyntaxNode > &leftHand, const std::string_view &identifier)
Definition: ParsingDriver.cpp:874
std::shared_ptr< SyntaxNode > CreateNil()
Definition: ParsingDriver.cpp:833
static std::shared_ptr< SyntaxNode > CreateVariableSizeNode(const size_t size)
Definition: ParsingDriver.cpp:1003
static std::shared_ptr< SyntaxNode > CreateDeclareMemory(const int_t size, const std::shared_ptr< SyntaxNode > &allocateDeclarations)
Definition: ParsingDriver.cpp:111
static std::shared_ptr< SyntaxNode > CreateLess(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:615
static std::shared_ptr< SyntaxNode > CreateNativeFunction(const std::shared_ptr< SyntaxNode > &returnExpression, const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &argument)
Definition: ParsingDriver.cpp:102
static std::shared_ptr< SyntaxNode > CreateLoop(const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:366
int32_t Parse() const
Definition: ParsingDriver.cpp:44
static std::shared_ptr< SyntaxNode > CreateMul(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:527
static std::shared_ptr< SyntaxNode > CreateOrAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:710
static std::shared_ptr< SyntaxNode > CreateDeclaratorNode(const std::string_view &identifier)
Definition: ParsingDriver.cpp:987
std::shared_ptr< SyntaxNode > CreateSelf()
Definition: ParsingDriver.cpp:818
static std::shared_ptr< SyntaxNode > CreateAwaitCompletion(const std::shared_ptr< SyntaxNode > &priority, const std::shared_ptr< SyntaxNode > &expression, const std::string_view &actionName)
Definition: ParsingDriver.cpp:469
static std::shared_ptr< SyntaxNode > CreateLeftShiftAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:728
static std::shared_ptr< SyntaxNode > CreateDoWhile(const std::shared_ptr< SyntaxNode > &statement, const std::shared_ptr< SyntaxNode > &condition)
Definition: ParsingDriver.cpp:306
std::shared_ptr< SyntaxNode > CreateDefineNode(const std::string_view &identifier, const std::string_view &text)
Definition: ParsingDriver.cpp:166
const std::shared_ptr< CodeBuffer > & GetCodeBuffer()
Definition: ParsingDriver.cpp:49
static std::shared_ptr< SyntaxNode > CreateLock(const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:373
static std::shared_ptr< SyntaxNode > CreateNot(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:781
Definition: StringPool.h:21
Definition: SymbolFactory.h:33
Definition: SyntaxNode.h:23
Definition: TypeDescriptorFactory.h:21
Definition: TypeDescriptor.h:22
Definition: CodeBuffer.cpp:12
std::int32_t int_t
Definition: Type.h:29
float float_t
Definition: Type.h:28
Definition: Noncopyable.h:18