CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
SLParser.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Parser.hpp"
11
13
17
20
22
24
26
27 // Syntax parser base class for HLSL and GLSL.
28 class SLParser : public Parser {
29 public:
30 SLParser(Log* log = nullptr);
31
32 protected:
33 // Accepts the semicolon token (Accept(Tokens::Semicolon)).
34 void semi();
35
36 protected: // Parsing
42 [[nodiscard]] virtual VarDeclarationPtr parseVarDeclaration(VarDeclarationStatement* declarationStatementRef, const TokenPtr& identifierToken = nullptr) = 0;
43
56
58 [[nodiscard]] ExpressionPtr parseExpressionWithSequenceOpt(); // expression (, expression)*
59 [[nodiscard]] ExpressionPtr parseArrayIndex(); // [ expression ]
61
65
75
76 [[nodiscard]] String parseIdent(TokenPtr identifierToken = nullptr, SourceArea* area = nullptr);
77
80
84
86 };
87
88} // namespace CeresEngine::ShaderCompiler
Log base class.
Definition Log.hpp:19
Definition Parser.hpp:34
Definition SLParser.hpp:28
SequenceExpressionPtr parseSequenceExpression(const ExpressionPtr &firstExpression)
Vector< SwitchCasePtr > parseSwitchCaseList()
virtual VarDeclarationStatementPtr parseParameter()=0
ExpressionStatementPtr parseExpressionStatement(const ExpressionPtr &expression=nullptr)
Vector< ExpressionPtr > parseArrayIndexList()
ArrayDimensionPtr parseArrayDimension(bool allowDynamicDimension=false)
virtual VarDeclarationPtr parseVarDeclaration(VarDeclarationStatement *declarationStatementRef, const TokenPtr &identifierToken=nullptr)=0
virtual CodeBlockPtr parseCodeBlock()=0
virtual StatementPtr parseForLoopInitializer()=0
virtual SwitchCasePtr parseSwitchCase()=0
void parseStatementWithCommentOpt(Vector< StatementPtr > &statements, const UniqueFunction< StatementPtr() const > &parseFunction)
TypeDenoterPtr parseTypeDenoterWithArrayOpt(const TypeDenoterPtr &baseTypeDenoter)
DoWhileLoopStatementPtr parseDoWhileLoopStatement()
ForLoopStatementPtr parseForLoopStatement()
InitializerExpressionPtr parseInitializerExpression()
Vector< ExpressionPtr > parseExpressionList(const Tokens listTerminatorToken, bool allowLastComma=false)
SwitchStatementPtr parseSwitchStatement()
Vector< ExpressionPtr > parseInitializerList()
Vector< StatementPtr > parseLocalStatementList()
Vector< VarDeclarationPtr > parseVarDeclarationList(VarDeclarationStatement *declarationStatementRef, TokenPtr firstidentifierToken=nullptr)
Vector< VarDeclarationStatementPtr > parseParameterList()
ExpressionPtr parseExpressionWithSequenceOpt()
virtual StatementPtr parseLocalStatement()=0
CtrlTransferStatementPtr parseCtrlTransferStatement()
Vector< ExpressionPtr > parseArgumentList()
ReturnStatementPtr parseReturnStatement()
VoidTypeDenoterPtr parseVoidTypeDenoter()
CodeBlockStatementPtr parseCodeBlockStatement()
ArrayExpressionPtr parseArrayExpression(const ExpressionPtr &expression)
Vector< ArrayDimensionPtr > parseArrayDimensionList(bool allowDynamicDimension=false)
String parseIdent(TokenPtr identifierToken=nullptr, SourceArea *area=nullptr)
WhileLoopStatementPtr parseWhileLoopStatement()
Definition SourceArea.hpp:20
Types
Definition Token.hpp:24
Definition Variant.hpp:20
Definition AST.hpp:33
SPtr< ReturnStatement > ReturnStatementPtr
Definition Visitor.hpp:62
SPtr< SequenceExpression > SequenceExpressionPtr
Definition Visitor.hpp:67
SPtr< Expression > ExpressionPtr
Definition Visitor.hpp:26
SPtr< CtrlTransferStatement > CtrlTransferStatementPtr
Definition Visitor.hpp:63
SPtr< ArrayDimension > ArrayDimensionPtr
Definition Visitor.hpp:36
SPtr< DoWhileLoopStatement > DoWhileLoopStatementPtr
Definition Visitor.hpp:57
SPtr< InitializerExpression > InitializerExpressionPtr
Definition Visitor.hpp:80
SPtr< ArrayExpression > ArrayExpressionPtr
Definition Visitor.hpp:78
SPtr< IfStatement > IfStatementPtr
Definition Visitor.hpp:58
SPtr< VarDeclaration > VarDeclarationPtr
Definition Visitor.hpp:39
SPtr< CodeBlock > CodeBlockPtr
Definition Visitor.hpp:30
SPtr< CodeBlockStatement > CodeBlockStatementPtr
Definition Visitor.hpp:54
SPtr< Statement > StatementPtr
Definition Visitor.hpp:25
SPtr< TypeDenoter > TypeDenoterPtr
Definition TypeDenoter.hpp:29
SPtr< SwitchCase > SwitchCasePtr
Definition Visitor.hpp:32
SPtr< VoidTypeDenoter > VoidTypeDenoterPtr
Definition TypeDenoter.hpp:30
SPtr< NullStatement > NullStatementPtr
Definition Visitor.hpp:53
SPtr< WhileLoopStatement > WhileLoopStatementPtr
Definition Visitor.hpp:56
SPtr< ExpressionStatement > ExpressionStatementPtr
Definition Visitor.hpp:61
SPtr< SwitchStatement > SwitchStatementPtr
Definition Visitor.hpp:60
SPtr< ElseStatement > ElseStatementPtr
Definition Visitor.hpp:59
SPtr< VarDeclarationStatement > VarDeclarationStatementPtr
Definition Visitor.hpp:49
SPtr< Token > TokenPtr
Definition Token.hpp:174
SPtr< ForLoopStatement > ForLoopStatementPtr
Definition Visitor.hpp:55
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
std::int32_t Int32
Definition DataTypes.hpp:21
FunctionBase< true, false, fu2::capacity_default, true, false, Signatures... > UniqueFunction
An owning non copyable function wrapper for arbitrary callable types.
Definition Function.hpp:59
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25