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 NamespaceRegistry;
21  class SymbolFactory;
22  class StringPool;
23  class TypeDescriptorFactory;
24 
28  class ParsingDriver final : Noncopyable, public std::enable_shared_from_this<ParsingDriver>
29  {
30  public:
31  ParsingDriver();
32  ParsingDriver(const ParsingDriver&) = delete;
33  ParsingDriver(ParsingDriver&&) noexcept = delete;
34  ParsingDriver& operator=(const ParsingDriver&) = delete;
35  ParsingDriver& operator=(ParsingDriver&&) noexcept = delete;
36  ~ParsingDriver() = default;
37 
38  int32_t Parse() const;
39 
40  const std::shared_ptr<CodeBuffer>& GetCodeBuffer();
41  const std::shared_ptr<CodeGenerator>& GetCodeGenerator();
42  const std::shared_ptr<DataBuffer>& GetDataBuffer();
43  const std::shared_ptr<GlobalSemanticAnalyzer>& GetGlobalSemanticAnalyzer();
44  const std::shared_ptr<NamespaceRegistry>& GetNamespaceRegistry();
45  const std::shared_ptr<SyntaxNode>& GetRootSyntaxNode() const;
46  const std::shared_ptr<SymbolFactory>& GetSymbolFactory();
47  const std::shared_ptr<StringPool>& GetStringPool();
48  const std::shared_ptr<TypeDescriptorFactory>& GetTypeDescriptorFactory();
49  std::shared_ptr<SyntaxNode> InjectGlobalInitializers(const std::shared_ptr<SyntaxNode>& root);
50 
51  protected:
52  static std::shared_ptr<SyntaxNode> Bind(const std::shared_ptr<SyntaxNode>& base, const std::shared_ptr<SyntaxNode>& next);
53 
54  // declarations
55  static std::shared_ptr<SyntaxNode> CreateNativeFunction(const std::shared_ptr<SyntaxNode>& returnExpression, const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& argument);
56  static std::shared_ptr<SyntaxNode> CreateDeclareMemory(const int_t size, const std::shared_ptr<SyntaxNode>& allocateDeclarations);
57  static std::shared_ptr<SyntaxNode> CreateDeclareStaticMemory(const int_t size, const std::shared_ptr<SyntaxNode>& allocateDeclarations);
58  std::shared_ptr<SyntaxNode> CreateNamespace(const std::string_view& name, const std::shared_ptr<SyntaxNode>& declarations);
59  static std::shared_ptr<SyntaxNode> CreateUsing(const std::string_view& name);
60  std::string_view CreateQualifiedName(const std::string_view& left, const std::string_view& right);
61 
62  // declaration
63  std::shared_ptr<SyntaxNode> CreateConstantNode(const std::string_view& identifier, const int_t value);
64  std::shared_ptr<SyntaxNode> CreateConstantNode(const std::string_view& identifier, const bool value);
65  std::shared_ptr<SyntaxNode> CreateConstantNode(const std::string_view& identifier, const float_t value);
66  std::shared_ptr<SyntaxNode> CreateConstantNode(const std::string_view& identifier, const std::string_view& text);
67  std::shared_ptr<SyntaxNode> CreateDefineNode(const std::string_view& identifier, const std::string_view& text);
68  static std::shared_ptr<SyntaxNode> CreateUndefineNode(const std::string_view& identifier);
69 
70  // actor
71  static std::shared_ptr<SyntaxNode> CreateActor(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& action);
72  static std::shared_ptr<SyntaxNode> CreatePhantom(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& action);
73  static std::shared_ptr<SyntaxNode> CreateModule(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& action);
74 
75  // action
76  std::shared_ptr<SyntaxNode> CreateAction(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& block);
77  static std::shared_ptr<SyntaxNode> CreateExtend(const std::string_view& identifier);
78 
79  // struct
80  static std::shared_ptr<SyntaxNode> CreateStruct(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& member);
81 
82  // function
83  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);
84 
85  // variable_type
86  std::shared_ptr<SyntaxNode> CreateActorTypeDescription();
87  static std::shared_ptr<SyntaxNode> CreateTypeDescription(const std::string_view& identifier);
88  static std::shared_ptr<SyntaxNode> CreateTypeDescription(const std::shared_ptr<TypeDescriptor>& typeDescriptor);
89 
90  // block
91  static std::shared_ptr<SyntaxNode> CreateBlock(const std::shared_ptr<SyntaxNode>& statement);
92 
93  // statement
94  static std::shared_ptr<SyntaxNode> CreateIf(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& statementIfTrue, const std::shared_ptr<SyntaxNode>& statementIfFalse);
95  static std::shared_ptr<SyntaxNode> CreateSwitch(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& statement);
96  static std::shared_ptr<SyntaxNode> CreateWhile(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& statement);
97  static std::shared_ptr<SyntaxNode> CreateDoWhile(const std::shared_ptr<SyntaxNode>& statement, const std::shared_ptr<SyntaxNode>& condition);
98  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);
99  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);
100  static std::shared_ptr<SyntaxNode> CreateLoop(const std::shared_ptr<SyntaxNode>& statement);
101  static std::shared_ptr<SyntaxNode> CreateLock(const std::shared_ptr<SyntaxNode>& statement);
102  static std::shared_ptr<SyntaxNode> CreateGoto(const std::string_view& labelName);
103  static std::shared_ptr<SyntaxNode> CreateLabel(const std::string_view& labelName);
104  static std::shared_ptr<SyntaxNode> CreateReturn(const std::shared_ptr<SyntaxNode>& expression);
105  static std::shared_ptr<SyntaxNode> CreateRollback(const std::shared_ptr<SyntaxNode>& expression);
106  static std::shared_ptr<SyntaxNode> CreateBreak();
107  static std::shared_ptr<SyntaxNode> CreateContinue();
108  static std::shared_ptr<SyntaxNode> CreateHalt();
109  static std::shared_ptr<SyntaxNode> CreateYield();
110  static std::shared_ptr<SyntaxNode> CreateComply(); // TODO: consider the name
111  static std::shared_ptr<SyntaxNode> CreateRefuse(); // TODO: consider the name
112  static std::shared_ptr<SyntaxNode> CreatePrint(const std::shared_ptr<SyntaxNode>& argument);
113  static std::shared_ptr<SyntaxNode> CreateRequest(const std::shared_ptr<SyntaxNode>& priority, const std::shared_ptr<SyntaxNode>& expression, const std::string_view& actionName);
114  static std::shared_ptr<SyntaxNode> CreateAwaitStart(const std::shared_ptr<SyntaxNode>& priority, const std::shared_ptr<SyntaxNode>& expression, const std::string_view& actionName);
115  static std::shared_ptr<SyntaxNode> CreateAwaitCompletion(const std::shared_ptr<SyntaxNode>& priority, const std::shared_ptr<SyntaxNode>& expression, const std::string_view& actionName);
116  static std::shared_ptr<SyntaxNode> CreateJoin(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
117 
118  // expression
119  static std::shared_ptr<SyntaxNode> CreateAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
120  static std::shared_ptr<SyntaxNode> CreateLogicalAnd(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
121  static std::shared_ptr<SyntaxNode> CreateLogicalOr(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
122  static std::shared_ptr<SyntaxNode> CreateAdd(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
123  static std::shared_ptr<SyntaxNode> CreateSub(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
124  static std::shared_ptr<SyntaxNode> CreateMul(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
125  static std::shared_ptr<SyntaxNode> CreateDiv(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
126  static std::shared_ptr<SyntaxNode> CreateMod(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
127  static std::shared_ptr<SyntaxNode> CreatePow(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
128  static std::shared_ptr<SyntaxNode> CreateAnd(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
129  static std::shared_ptr<SyntaxNode> CreateOr(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
130  static std::shared_ptr<SyntaxNode> CreateXor(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
131  static std::shared_ptr<SyntaxNode> CreateLeftShift(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
132  static std::shared_ptr<SyntaxNode> CreateRightShift(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
133  static std::shared_ptr<SyntaxNode> CreateGreater(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
134  static std::shared_ptr<SyntaxNode> CreateGreaterEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
135  static std::shared_ptr<SyntaxNode> CreateLess(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
136  static std::shared_ptr<SyntaxNode> CreateLessEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
137  static std::shared_ptr<SyntaxNode> CreateEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
138  static std::shared_ptr<SyntaxNode> CreateNotEqual(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
139  static std::shared_ptr<SyntaxNode> CreateAddAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
140  static std::shared_ptr<SyntaxNode> CreateSubAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
141  static std::shared_ptr<SyntaxNode> CreateMulAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
142  static std::shared_ptr<SyntaxNode> CreateDivAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
143  static std::shared_ptr<SyntaxNode> CreateModAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
144  static std::shared_ptr<SyntaxNode> CreatePowAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
145  static std::shared_ptr<SyntaxNode> CreateAndAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
146  static std::shared_ptr<SyntaxNode> CreateOrAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
147  static std::shared_ptr<SyntaxNode> CreateXorAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
148  static std::shared_ptr<SyntaxNode> CreateLeftShiftAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
149  static std::shared_ptr<SyntaxNode> CreateRightShiftAndAssign(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& rightHand);
150  std::shared_ptr<SyntaxNode> CreateIncrement(const std::shared_ptr<SyntaxNode>& expression);
151  std::shared_ptr<SyntaxNode> CreateDecrement(const std::shared_ptr<SyntaxNode>& expression);
152  static std::shared_ptr<SyntaxNode> CreateExpressionIf(const std::shared_ptr<SyntaxNode>& condition, const std::shared_ptr<SyntaxNode>& trueStatement, const std::shared_ptr<SyntaxNode>& falseStatement);
153 
154  // primary
155  static std::shared_ptr<SyntaxNode> CreateNegative(const std::shared_ptr<SyntaxNode>& expression);
156  static std::shared_ptr<SyntaxNode> CreateNot(const std::shared_ptr<SyntaxNode>& expression);
157  static std::shared_ptr<SyntaxNode> CreateComplement1(const std::shared_ptr<SyntaxNode>& expression);
158  static std::shared_ptr<SyntaxNode> CreateSizeOf(const std::shared_ptr<SyntaxNode>& variableType);
159  static std::shared_ptr<SyntaxNode> CreateCall(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& argument);
160 
161  // constant
162  std::shared_ptr<SyntaxNode> CreatePriority();
163  std::shared_ptr<SyntaxNode> CreateSelf();
164  std::shared_ptr<SyntaxNode> CreateSender();
165  std::shared_ptr<SyntaxNode> CreateThis();
166  std::shared_ptr<SyntaxNode> CreateNil();
167  std::shared_ptr<SyntaxNode> CreateBool(const bool value);
168  std::shared_ptr<SyntaxNode> CreateInteger(const int_t value);
169  std::shared_ptr<SyntaxNode> CreateFloat(const float_t value);
170  std::shared_ptr<SyntaxNode> CreateString(const std::string_view& text);
171 
172  // left hand
173  static std::shared_ptr<SyntaxNode> CreateMemberVariable(const std::shared_ptr<SyntaxNode>& leftHand, const std::string_view& identifier);
174  static std::shared_ptr<SyntaxNode> CreateMemberFunction(const std::shared_ptr<SyntaxNode>& leftHand, const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& argument);
175  static std::shared_ptr<SyntaxNode> CreateArray(const std::shared_ptr<SyntaxNode>& leftHand, const std::shared_ptr<SyntaxNode>& expression);
176  static std::shared_ptr<SyntaxNode> CreateIdentifier(const std::string_view& identifier);
177 
178  // cases
179  static std::shared_ptr<SyntaxNode> BindCaseNode(const std::shared_ptr<SyntaxNode>& next, const std::shared_ptr<SyntaxNode>& kase);
180 
181  // case
182  static std::shared_ptr<SyntaxNode> CreateSwitchCaseNode(const std::shared_ptr<SyntaxNode>& expression, const std::shared_ptr<SyntaxNode>& statements);
183  static std::shared_ptr<SyntaxNode> CreateSwitchDefaultNode(const std::shared_ptr<SyntaxNode>& statements);
184 
185  // arg_calls
186  static std::shared_ptr<SyntaxNode> CreateArgumentNode(const std::shared_ptr<SyntaxNode>& expression);
187  static std::shared_ptr<SyntaxNode> CreateArgumentNode(const std::shared_ptr<SyntaxNode>& nextArgument, const std::shared_ptr<SyntaxNode>& expression);
188 
189  // arg_decls
190  static std::shared_ptr<SyntaxNode> CreateDeclareArgumentNode(const std::shared_ptr<SyntaxNode>& declareVariable);
191  static std::shared_ptr<SyntaxNode> CreateDeclareArgumentNode(const std::shared_ptr<SyntaxNode>& nextDeclareArgument, const std::shared_ptr<SyntaxNode>& declareVariable);
192 
193  // variable_decl
194  static std::shared_ptr<SyntaxNode> CreateDeclareVariableNode(const std::shared_ptr<SyntaxNode>& variableType, const std::shared_ptr<SyntaxNode>& declarator, const std::shared_ptr<SyntaxNode>& expression);
195  static std::shared_ptr<SyntaxNode> CreateConstDeclarationNode(const std::shared_ptr<SyntaxNode>& variableType, const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& expression);
196 
197  // declarator
198  static std::shared_ptr<SyntaxNode> CreateDeclaratorNode(const std::string_view& identifier);
199  static std::shared_ptr<SyntaxNode> CreateDeclaratorNode(const std::string_view& identifier, const std::shared_ptr<SyntaxNode>& variableSizeNode);
200 
201  // variable_size
202  static std::shared_ptr<SyntaxNode> CreateVariableSizeNode(const size_t size);
203  static std::shared_ptr<SyntaxNode> CreateVariableSizeNode(const std::string_view& identifier);
204 
205  private:
206  static std::shared_ptr<SyntaxNode> AppendNode(const std::shared_ptr<SyntaxNode>& base, const std::shared_ptr<SyntaxNode>& next);
207  std::shared_ptr<SyntaxNode> CollectGlobalInitializerStatements(const std::shared_ptr<SyntaxNode>& root) const;
208  static std::shared_ptr<SyntaxNode> CollectInitializerStatementsFromDeclarations(const std::shared_ptr<SyntaxNode>& node);
209  static bool HasGlobalNameConflict(const std::shared_ptr<SyntaxNode>& root, const std::string_view& name);
210  void SetRootSyntaxNode(const std::shared_ptr<SyntaxNode>& rootSyntaxNode);
211 
212  std::unique_ptr<Parser> mParser;
213 
214  std::shared_ptr<CodeBuffer> mCodeBuffer;
215  std::shared_ptr<CodeGenerator> mCodeGenerator;
216  std::shared_ptr<DataBuffer> mDataBuffer;
217  std::shared_ptr<GlobalSemanticAnalyzer> mGlobalSemanticAnalyzer;
218  std::shared_ptr<LocalSemanticAnalyzer> mLocalSemanticAnalyzer;
219  std::shared_ptr<SyntaxNode> mRootSyntaxNode;
220  std::shared_ptr<SymbolFactory> mSymbolFactory;
221  std::shared_ptr<StringPool> mStringPool;
222  std::shared_ptr<TypeDescriptorFactory> mTypeDescriptorFactory;
223  std::shared_ptr<NamespaceRegistry> mNamespaceRegistry;
224 
225  friend class Parser;
226  };
227 }
Definition: CodeBuffer.h:25
Definition: CodeGenerator.h:27
Definition: DataBuffer.h:25
Definition: GlobalSemanticAnalyzer.h:22
Definition: LocalSemanticAnalyzer.h:24
Definition: NamespaceRegistry.h:18
Definition: ParsingDriver.h:29
std::shared_ptr< SyntaxNode > CreateDecrement(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:946
static std::shared_ptr< SyntaxNode > CreateMulAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:856
static std::shared_ptr< SyntaxNode > CreateAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:676
static std::shared_ptr< SyntaxNode > CreateConstDeclarationNode(const std::shared_ptr< SyntaxNode > &variableType, const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:1193
static std::shared_ptr< SyntaxNode > CreateJoin(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:667
static std::shared_ptr< SyntaxNode > CreateDiv(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:726
static std::shared_ptr< SyntaxNode > CreateContinue()
Definition: ParsingDriver.cpp:603
static std::shared_ptr< SyntaxNode > CreateOr(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:758
static std::shared_ptr< SyntaxNode > CreateXorAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:910
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:420
std::shared_ptr< SyntaxNode > InjectGlobalInitializers(const std::shared_ptr< SyntaxNode > &root)
Definition: ParsingDriver.cpp:116
static std::shared_ptr< SyntaxNode > CreateLabel(const std::string_view &labelName)
Definition: ParsingDriver.cpp:576
static std::shared_ptr< SyntaxNode > CreateStruct(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &member)
Definition: ParsingDriver.cpp:411
static std::shared_ptr< SyntaxNode > CreateDeclareStaticMemory(const int_t size, const std::shared_ptr< SyntaxNode > &allocateDeclarations)
Definition: ParsingDriver.cpp:274
static std::shared_ptr< SyntaxNode > CreateAndAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:892
static std::shared_ptr< SyntaxNode > CreateReturn(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:583
const std::shared_ptr< NamespaceRegistry > & GetNamespaceRegistry()
Definition: ParsingDriver.cpp:86
static std::shared_ptr< SyntaxNode > CreatePowAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:883
static std::shared_ptr< SyntaxNode > CreateArgumentNode(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:1138
static std::shared_ptr< SyntaxNode > CreateLessEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:814
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:640
static std::shared_ptr< SyntaxNode > CreateRollback(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:590
static std::shared_ptr< SyntaxNode > CreateLogicalOr(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:693
static std::shared_ptr< SyntaxNode > CreateMod(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:734
static std::shared_ptr< SyntaxNode > CreateModAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:874
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:470
static std::shared_ptr< SyntaxNode > CreateComplement1(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:979
std::shared_ptr< SyntaxNode > CreateFloat(const float_t value)
Definition: ParsingDriver.cpp:1062
static std::shared_ptr< SyntaxNode > CreateGreaterEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:798
static std::shared_ptr< SyntaxNode > CreateActor(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &action)
Definition: ParsingDriver.cpp:369
const std::shared_ptr< GlobalSemanticAnalyzer > & GetGlobalSemanticAnalyzer()
Definition: ParsingDriver.cpp:81
static std::shared_ptr< SyntaxNode > CreateDeclareArgumentNode(const std::shared_ptr< SyntaxNode > &declareVariable)
Definition: ParsingDriver.cpp:1154
static std::shared_ptr< SyntaxNode > CreateRightShift(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:782
static std::shared_ptr< SyntaxNode > CreateAnd(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:750
std::shared_ptr< SyntaxNode > CreateNamespace(const std::string_view &name, const std::shared_ptr< SyntaxNode > &declarations)
Definition: ParsingDriver.cpp:343
const std::shared_ptr< CodeGenerator > & GetCodeGenerator()
Definition: ParsingDriver.cpp:71
std::shared_ptr< SyntaxNode > CreateActorTypeDescription()
Definition: ParsingDriver.cpp:440
const std::shared_ptr< SymbolFactory > & GetSymbolFactory()
Definition: ParsingDriver.cpp:101
ParsingDriver()
Definition: ParsingDriver.cpp:32
static std::shared_ptr< SyntaxNode > CreateArray(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:1098
static std::shared_ptr< SyntaxNode > CreateGreater(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:790
static std::shared_ptr< SyntaxNode > CreateSwitchCaseNode(const std::shared_ptr< SyntaxNode > &expression, const std::shared_ptr< SyntaxNode > &statements)
Definition: ParsingDriver.cpp:1122
std::shared_ptr< SyntaxNode > CreateInteger(const int_t value)
Definition: ParsingDriver.cpp:1046
static std::shared_ptr< SyntaxNode > CreateLeftShift(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:774
static std::shared_ptr< SyntaxNode > CreateSwitch(const std::shared_ptr< SyntaxNode > &condition, const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:479
static std::shared_ptr< SyntaxNode > CreateNegative(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:965
static std::shared_ptr< SyntaxNode > CreateRefuse()
Definition: ParsingDriver.cpp:627
static std::shared_ptr< SyntaxNode > CreateEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:822
const std::shared_ptr< TypeDescriptorFactory > & GetTypeDescriptorFactory()
Definition: ParsingDriver.cpp:111
std::shared_ptr< SyntaxNode > CreateIncrement(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:937
static std::shared_ptr< SyntaxNode > CreateSizeOf(const std::shared_ptr< SyntaxNode > &variableType)
Definition: ParsingDriver.cpp:986
static std::shared_ptr< SyntaxNode > CreateSwitchDefaultNode(const std::shared_ptr< SyntaxNode > &statements)
Definition: ParsingDriver.cpp:1130
std::shared_ptr< SyntaxNode > CreateSender()
Definition: ParsingDriver.cpp:1017
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:1114
static std::shared_ptr< SyntaxNode > CreateAdd(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:702
const std::shared_ptr< StringPool > & GetStringPool()
Definition: ParsingDriver.cpp:106
static std::shared_ptr< SyntaxNode > CreateXor(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:766
static std::shared_ptr< SyntaxNode > CreatePrint(const std::shared_ptr< SyntaxNode > &argument)
Definition: ParsingDriver.cpp:633
static std::shared_ptr< SyntaxNode > CreateCall(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &argument)
Definition: ParsingDriver.cpp:993
static std::shared_ptr< SyntaxNode > CreateWhile(const std::shared_ptr< SyntaxNode > &condition, const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:487
static std::shared_ptr< SyntaxNode > CreateExtend(const std::string_view &identifier)
Definition: ParsingDriver.cpp:403
static std::shared_ptr< SyntaxNode > CreateNotEqual(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:830
static std::shared_ptr< SyntaxNode > CreateUndefineNode(const std::string_view &identifier)
Definition: ParsingDriver.cpp:336
static std::shared_ptr< SyntaxNode > CreateSubAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:847
static std::shared_ptr< SyntaxNode > CreatePow(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:742
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:503
static std::shared_ptr< SyntaxNode > CreateLogicalAnd(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:684
static std::shared_ptr< SyntaxNode > CreateBlock(const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:462
static std::shared_ptr< SyntaxNode > CreateHalt()
Definition: ParsingDriver.cpp:609
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:1170
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:1089
std::shared_ptr< SyntaxNode > CreatePriority()
Definition: ParsingDriver.cpp:1002
const std::shared_ptr< SyntaxNode > & GetRootSyntaxNode() const
Definition: ParsingDriver.cpp:91
static std::shared_ptr< SyntaxNode > CreateModule(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &action)
Definition: ParsingDriver.cpp:385
const std::shared_ptr< DataBuffer > & GetDataBuffer()
Definition: ParsingDriver.cpp:76
static std::shared_ptr< SyntaxNode > CreateUsing(const std::string_view &name)
Definition: ParsingDriver.cpp:351
static std::shared_ptr< SyntaxNode > CreateGoto(const std::string_view &labelName)
Definition: ParsingDriver.cpp:569
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:955
static std::shared_ptr< SyntaxNode > CreateIdentifier(const std::string_view &identifier)
Definition: ParsingDriver.cpp:1106
static std::shared_ptr< SyntaxNode > CreateAddAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:838
friend class Parser
Definition: ParsingDriver.h:225
static std::shared_ptr< SyntaxNode > CreateRightShiftAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:928
std::shared_ptr< SyntaxNode > CreateString(const std::string_view &text)
Definition: ParsingDriver.cpp:1070
static std::shared_ptr< SyntaxNode > CreateDivAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:865
std::shared_ptr< SyntaxNode > CreateAction(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &block)
Definition: ParsingDriver.cpp:394
static std::shared_ptr< SyntaxNode > Bind(const std::shared_ptr< SyntaxNode > &base, const std::shared_ptr< SyntaxNode > &next)
Definition: ParsingDriver.cpp:139
static std::shared_ptr< SyntaxNode > CreateBreak()
Definition: ParsingDriver.cpp:597
static std::shared_ptr< SyntaxNode > CreateTypeDescription(const std::string_view &identifier)
Definition: ParsingDriver.cpp:447
static std::shared_ptr< SyntaxNode > CreateSub(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:710
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:649
static std::shared_ptr< SyntaxNode > CreateYield()
Definition: ParsingDriver.cpp:615
static std::shared_ptr< SyntaxNode > CreatePhantom(const std::string_view &identifier, const std::shared_ptr< SyntaxNode > &action)
Definition: ParsingDriver.cpp:377
std::shared_ptr< SyntaxNode > CreateConstantNode(const std::string_view &identifier, const int_t value)
Definition: ParsingDriver.cpp:294
static std::shared_ptr< SyntaxNode > CreateComply()
Definition: ParsingDriver.cpp:621
ParsingDriver(const ParsingDriver &)=delete
static std::shared_ptr< SyntaxNode > CreateMemberVariable(const std::shared_ptr< SyntaxNode > &leftHand, const std::string_view &identifier)
Definition: ParsingDriver.cpp:1081
std::shared_ptr< SyntaxNode > CreateNil()
Definition: ParsingDriver.cpp:1031
static std::shared_ptr< SyntaxNode > CreateVariableSizeNode(const size_t size)
Definition: ParsingDriver.cpp:1219
static std::shared_ptr< SyntaxNode > CreateDeclareMemory(const int_t size, const std::shared_ptr< SyntaxNode > &allocateDeclarations)
Definition: ParsingDriver.cpp:266
std::string_view CreateQualifiedName(const std::string_view &left, const std::string_view &right)
Definition: ParsingDriver.cpp:358
static std::shared_ptr< SyntaxNode > CreateLess(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:806
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:257
static std::shared_ptr< SyntaxNode > CreateLoop(const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:555
int32_t Parse() const
Definition: ParsingDriver.cpp:61
static std::shared_ptr< SyntaxNode > CreateMul(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:718
static std::shared_ptr< SyntaxNode > CreateOrAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:901
static std::shared_ptr< SyntaxNode > CreateDeclaratorNode(const std::string_view &identifier)
Definition: ParsingDriver.cpp:1203
std::shared_ptr< SyntaxNode > CreateSelf()
Definition: ParsingDriver.cpp:1009
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:658
static std::shared_ptr< SyntaxNode > CreateLeftShiftAndAssign(const std::shared_ptr< SyntaxNode > &leftHand, const std::shared_ptr< SyntaxNode > &rightHand)
Definition: ParsingDriver.cpp:919
static std::shared_ptr< SyntaxNode > CreateDoWhile(const std::shared_ptr< SyntaxNode > &statement, const std::shared_ptr< SyntaxNode > &condition)
Definition: ParsingDriver.cpp:495
std::shared_ptr< SyntaxNode > CreateBool(const bool value)
Definition: ParsingDriver.cpp:1038
std::shared_ptr< SyntaxNode > CreateThis()
Definition: ParsingDriver.cpp:1024
std::shared_ptr< SyntaxNode > CreateDefineNode(const std::string_view &identifier, const std::string_view &text)
Definition: ParsingDriver.cpp:330
const std::shared_ptr< CodeBuffer > & GetCodeBuffer()
Definition: ParsingDriver.cpp:66
static std::shared_ptr< SyntaxNode > CreateLock(const std::shared_ptr< SyntaxNode > &statement)
Definition: ParsingDriver.cpp:562
static std::shared_ptr< SyntaxNode > CreateNot(const std::shared_ptr< SyntaxNode > &expression)
Definition: ParsingDriver.cpp:972
Definition: StringPool.h:21
Definition: SymbolFactory.h:34
Definition: SyntaxNode.h:22
Definition: TypeDescriptorFactory.h:21
Definition: TypeDescriptor.h:23
Definition: CodeBuffer.cpp:12
std::int32_t int_t
Definition: Type.h:28
float float_t
Definition: Type.h:27
Definition: Noncopyable.h:18