CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
CeresEngine::ShaderCompiler::Parser Class Referenceabstract

#include <CeresEngine/Material/ShaderCompiler/Frontend/Parser.hpp>

Inheritance diagram for CeresEngine::ShaderCompiler::Parser:
CeresEngine::ShaderCompiler::PreProcessor CeresEngine::ShaderCompiler::SLParser CeresEngine::ShaderCompiler::GLSLPreProcessor CeresEngine::ShaderCompiler::GLSLParser CeresEngine::ShaderCompiler::HLSLParser

Classes

struct  ParsingState
 
struct  ScannerStackEntry
 

Public Member Functions

virtual ~Parser ()=default
 

Protected Types

using Tokens = Token::Types
 
using BinaryOpList = InitializerList< BinaryOp >
 

Protected Member Functions

 Parser (Log *log)
 
void error (const String &msg, const SourceArea &area, bool breakWithException=true)
 
void error (const String &msg, const Token *token, bool breakWithException=true)
 
void error (const String &msg, bool prevToken=true, bool breakWithException=true)
 
void errorUnexpected (const String &hint="", const Token *token=nullptr, bool breakWithException=false)
 
void errorUnexpected (const Tokens type, const Token *token=nullptr, bool breakWithException=false)
 
void errorInternal (const String &msg, const String &procName)
 
void warning (const String &msg, const SourceArea &area)
 
void warning (const String &msg, const Token *token)
 
void warning (const String &msg, bool prevToken=true)
 
void enableWarnings (bool enable)
 
virtual ScannerPtr makeScanner ()=0
 
virtual void pushScannerSource (const SourceCodePtr &source, const String &filename="")
 
virtual bool popScannerSource ()
 
ParsingState getActiveParsingState () const
 
ScannergetScanner ()
 
String getCurrentFilename () const
 
TokenPtr accept (const Tokens type)
 
TokenPtr accept (const Tokens type, const String &spell)
 
virtual TokenPtr acceptIt ()
 
void pushTokenString (const TokenPtrString &tokenString)
 
void popTokenString ()
 
void ignoreWhiteSpaces (bool includeNewLines=false, bool includeComments=false)
 
void ignoreNewLines ()
 
template<typename T >
const TupdateSourceArea (const T &ast, const AST *areaOriginAST=nullptr)
 
template<typename T >
const TupdateSourceArea (const T &ast, const ASTPtr &firstAreaOriginAST, const ASTPtr &lastAreaOriginAST)
 
template<typename T >
const TupdateSourceAreaOffset (const T &ast)
 
void pushParsingState (const ParsingState &state)
 
void popParsingState ()
 
void pushPreParsedAST (const ASTPtr &ast)
 Pushes the specified AST node onto the stack of pre-parsed AST nodes.
 
ASTPtr popPreParsedAST ()
 
ExpressionPtr parseGenericExpression ()
 
TernaryExpressionPtr parseTernaryExpression (const ExpressionPtr &condExpression)
 
ExpressionPtr parseLogicOrExpression ()
 
ExpressionPtr parseLogicAndExpression ()
 
ExpressionPtr parseBitwiseOrExpression ()
 
ExpressionPtr parseBitwiseXOrExpression ()
 
ExpressionPtr parseBitwiseAndExpression ()
 
ExpressionPtr parseEqualityExpression ()
 
ExpressionPtr parseRelationExpression ()
 
ExpressionPtr parseShiftExpression ()
 
ExpressionPtr parseAddExpression ()
 
ExpressionPtr parseSubExpression ()
 
ExpressionPtr parseMulExpression ()
 
ExpressionPtr parseDivExpression ()
 
ExpressionPtr parseValueExpression ()
 
virtual ExpressionPtr parsePrimaryExpression ()=0
 
Int32 parseIntLiteral (TokenPtr token=nullptr)
 
Int32 parseIntLiteral (const String &valueStr, const Token *token=nullptr)
 
LoggetLog () const
 
ReportHandlergetReportHandler ()
 
NameManglinggetNameMangling ()
 
const StringfindNameManglingPrefix (const String &ident) const
 
template<typename T , typename... Args>
SPtr< Tmake (Args &&... args)
 
const TokenPtrgetToken () const
 
Tokens getTokenType () const
 
bool is (const Tokens type) const
 
bool is (const Tokens type, const String &spell) const
 

Private Member Functions

ExpressionPtr parseLtrBinaryExpression (const UniqueFunction< ExpressionPtr() const > &parseSubExpressionFunc, const BinaryOpList &binaryOps)
 
void incUnexpectedTokenCounter ()
 
void assertTokenType (const Tokens type)
 
void assertTokenSpell (const String &spell)
 

Private Attributes

ReportHandler mReportHandler
 
NameMangling mNameMangling
 
LogmLog = nullptr
 
TokenPtr mToken
 
Stack< ScannerStackEntrymScannerStack
 
Stack< ParsingStatemParsingStateStack
 
Stack< ASTPtrmPreParsedASTStack
 
UInt32 mUnexpectedTokenCounter = 0
 
const UInt32 unexpectedTokenLimit = 3
 
bool mEnableWarnings = false
 

Member Typedef Documentation

◆ BinaryOpList

◆ Tokens

Constructor & Destructor Documentation

◆ ~Parser()

virtual CeresEngine::ShaderCompiler::Parser::~Parser ( )
virtualdefault

◆ Parser()

CeresEngine::ShaderCompiler::Parser::Parser ( Log log)
protected

Member Function Documentation

◆ accept() [1/2]

TokenPtr CeresEngine::ShaderCompiler::Parser::accept ( const Tokens  type)
protected

◆ accept() [2/2]

TokenPtr CeresEngine::ShaderCompiler::Parser::accept ( const Tokens  type,
const String spell 
)
protected

◆ acceptIt()

virtual TokenPtr CeresEngine::ShaderCompiler::Parser::acceptIt ( )
protectedvirtual

◆ assertTokenSpell()

void CeresEngine::ShaderCompiler::Parser::assertTokenSpell ( const String spell)
private

◆ assertTokenType()

void CeresEngine::ShaderCompiler::Parser::assertTokenType ( const Tokens  type)
private

◆ enableWarnings()

void CeresEngine::ShaderCompiler::Parser::enableWarnings ( bool  enable)
protected

◆ error() [1/3]

void CeresEngine::ShaderCompiler::Parser::error ( const String msg,
bool  prevToken = true,
bool  breakWithException = true 
)
protected

◆ error() [2/3]

void CeresEngine::ShaderCompiler::Parser::error ( const String msg,
const SourceArea area,
bool  breakWithException = true 
)
protected

◆ error() [3/3]

void CeresEngine::ShaderCompiler::Parser::error ( const String msg,
const Token token,
bool  breakWithException = true 
)
protected

◆ errorInternal()

void CeresEngine::ShaderCompiler::Parser::errorInternal ( const String msg,
const String procName 
)
protected

◆ errorUnexpected() [1/2]

void CeresEngine::ShaderCompiler::Parser::errorUnexpected ( const String hint = "",
const Token token = nullptr,
bool  breakWithException = false 
)
protected

◆ errorUnexpected() [2/2]

void CeresEngine::ShaderCompiler::Parser::errorUnexpected ( const Tokens  type,
const Token token = nullptr,
bool  breakWithException = false 
)
protected

◆ findNameManglingPrefix()

const String * CeresEngine::ShaderCompiler::Parser::findNameManglingPrefix ( const String ident) const
protected

◆ getActiveParsingState()

ParsingState CeresEngine::ShaderCompiler::Parser::getActiveParsingState ( ) const
protected

◆ getCurrentFilename()

String CeresEngine::ShaderCompiler::Parser::getCurrentFilename ( ) const
protected

◆ getLog()

Log * CeresEngine::ShaderCompiler::Parser::getLog ( ) const
inlineprotected

◆ getNameMangling()

NameMangling & CeresEngine::ShaderCompiler::Parser::getNameMangling ( )
inlineprotected

◆ getReportHandler()

ReportHandler & CeresEngine::ShaderCompiler::Parser::getReportHandler ( )
inlineprotected

◆ getScanner()

Scanner & CeresEngine::ShaderCompiler::Parser::getScanner ( )
protected

◆ getToken()

const TokenPtr & CeresEngine::ShaderCompiler::Parser::getToken ( ) const
inlineprotected

◆ getTokenType()

Tokens CeresEngine::ShaderCompiler::Parser::getTokenType ( ) const
inlineprotected

◆ ignoreNewLines()

void CeresEngine::ShaderCompiler::Parser::ignoreNewLines ( )
protected

◆ ignoreWhiteSpaces()

void CeresEngine::ShaderCompiler::Parser::ignoreWhiteSpaces ( bool  includeNewLines = false,
bool  includeComments = false 
)
protected

◆ incUnexpectedTokenCounter()

void CeresEngine::ShaderCompiler::Parser::incUnexpectedTokenCounter ( )
private

◆ is() [1/2]

bool CeresEngine::ShaderCompiler::Parser::is ( const Tokens  type) const
inlineprotected

◆ is() [2/2]

bool CeresEngine::ShaderCompiler::Parser::is ( const Tokens  type,
const String spell 
) const
inlineprotected

◆ make()

template<typename T , typename... Args>
SPtr< T > CeresEngine::ShaderCompiler::Parser::make ( Args &&...  args)
inlineprotected

◆ makeScanner()

virtual ScannerPtr CeresEngine::ShaderCompiler::Parser::makeScanner ( )
protectedpure virtual

◆ parseAddExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseAddExpression ( )
protected

◆ parseBitwiseAndExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseBitwiseAndExpression ( )
protected

◆ parseBitwiseOrExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseBitwiseOrExpression ( )
protected

◆ parseBitwiseXOrExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseBitwiseXOrExpression ( )
protected

◆ parseDivExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseDivExpression ( )
protected

◆ parseEqualityExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseEqualityExpression ( )
protected

◆ parseGenericExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseGenericExpression ( )
protected

◆ parseIntLiteral() [1/2]

Int32 CeresEngine::ShaderCompiler::Parser::parseIntLiteral ( const String valueStr,
const Token token = nullptr 
)
protected

◆ parseIntLiteral() [2/2]

Int32 CeresEngine::ShaderCompiler::Parser::parseIntLiteral ( TokenPtr  token = nullptr)
protected

◆ parseLogicAndExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseLogicAndExpression ( )
protected

◆ parseLogicOrExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseLogicOrExpression ( )
protected

◆ parseLtrBinaryExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseLtrBinaryExpression ( const UniqueFunction< ExpressionPtr() const > &  parseSubExpressionFunc,
const BinaryOpList binaryOps 
)
private

◆ parseMulExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseMulExpression ( )
protected

◆ parsePrimaryExpression()

virtual ExpressionPtr CeresEngine::ShaderCompiler::Parser::parsePrimaryExpression ( )
protectedpure virtual

◆ parseRelationExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseRelationExpression ( )
protected

◆ parseShiftExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseShiftExpression ( )
protected

◆ parseSubExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseSubExpression ( )
protected

◆ parseTernaryExpression()

TernaryExpressionPtr CeresEngine::ShaderCompiler::Parser::parseTernaryExpression ( const ExpressionPtr condExpression)
protected

◆ parseValueExpression()

ExpressionPtr CeresEngine::ShaderCompiler::Parser::parseValueExpression ( )
protected

◆ popParsingState()

void CeresEngine::ShaderCompiler::Parser::popParsingState ( )
protected

◆ popPreParsedAST()

ASTPtr CeresEngine::ShaderCompiler::Parser::popPreParsedAST ( )
protected

◆ popScannerSource()

virtual bool CeresEngine::ShaderCompiler::Parser::popScannerSource ( )
protectedvirtual

◆ popTokenString()

void CeresEngine::ShaderCompiler::Parser::popTokenString ( )
protected

◆ pushParsingState()

void CeresEngine::ShaderCompiler::Parser::pushParsingState ( const ParsingState state)
protected

◆ pushPreParsedAST()

void CeresEngine::ShaderCompiler::Parser::pushPreParsedAST ( const ASTPtr ast)
protected

Pushes the specified AST node onto the stack of pre-parsed AST nodes.

This can be used to pass AST nodes down a parsing function call stack (e.g. used for ObjectExpression which is used in many parsing functions). This is meant to be used only for a few situations because care must be taken that none of these AST nodes will be ignored (i.e. lost in the stack).

◆ pushScannerSource()

virtual void CeresEngine::ShaderCompiler::Parser::pushScannerSource ( const SourceCodePtr source,
const String filename = "" 
)
protectedvirtual

◆ pushTokenString()

void CeresEngine::ShaderCompiler::Parser::pushTokenString ( const TokenPtrString tokenString)
protected

◆ updateSourceArea() [1/2]

template<typename T >
const T & CeresEngine::ShaderCompiler::Parser::updateSourceArea ( const T ast,
const AST areaOriginAST = nullptr 
)
inlineprotected

◆ updateSourceArea() [2/2]

template<typename T >
const T & CeresEngine::ShaderCompiler::Parser::updateSourceArea ( const T ast,
const ASTPtr firstAreaOriginAST,
const ASTPtr lastAreaOriginAST 
)
inlineprotected

◆ updateSourceAreaOffset()

template<typename T >
const T & CeresEngine::ShaderCompiler::Parser::updateSourceAreaOffset ( const T ast)
inlineprotected

◆ warning() [1/3]

void CeresEngine::ShaderCompiler::Parser::warning ( const String msg,
bool  prevToken = true 
)
protected

◆ warning() [2/3]

void CeresEngine::ShaderCompiler::Parser::warning ( const String msg,
const SourceArea area 
)
protected

◆ warning() [3/3]

void CeresEngine::ShaderCompiler::Parser::warning ( const String msg,
const Token token 
)
protected

Member Data Documentation

◆ mEnableWarnings

bool CeresEngine::ShaderCompiler::Parser::mEnableWarnings = false
private

◆ mLog

Log* CeresEngine::ShaderCompiler::Parser::mLog = nullptr
private

◆ mNameMangling

NameMangling CeresEngine::ShaderCompiler::Parser::mNameMangling
private

◆ mParsingStateStack

Stack<ParsingState> CeresEngine::ShaderCompiler::Parser::mParsingStateStack
private

◆ mPreParsedASTStack

Stack<ASTPtr> CeresEngine::ShaderCompiler::Parser::mPreParsedASTStack
private

◆ mReportHandler

ReportHandler CeresEngine::ShaderCompiler::Parser::mReportHandler
private

◆ mScannerStack

Stack<ScannerStackEntry> CeresEngine::ShaderCompiler::Parser::mScannerStack
private

◆ mToken

TokenPtr CeresEngine::ShaderCompiler::Parser::mToken
private

◆ mUnexpectedTokenCounter

UInt32 CeresEngine::ShaderCompiler::Parser::mUnexpectedTokenCounter = 0
private

◆ unexpectedTokenLimit

const UInt32 CeresEngine::ShaderCompiler::Parser::unexpectedTokenLimit = 3
private

The documentation for this class was generated from the following file: