9 #include "../runner/common/Noncopyable.h"
18 class GlobalSemanticAnalyzer;
19 class LocalSemanticAnalyzer;
20 class NamespaceRegistry;
23 class TypeDescriptorFactory;
38 int32_t
Parse() const;
60 std::string_view
CreateQualifiedName(const std::string_view& left, const std::string_view& right);
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);
212 std::unique_ptr<
Parser> mParser;
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