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
 
Scanner & getScanner ()
 
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 T & updateSourceArea (const T &ast, const AST *areaOriginAST=nullptr)
 
template<typename T >
const T & updateSourceArea (const T &ast, const ASTPtr &firstAreaOriginAST, const ASTPtr &lastAreaOriginAST)
 
template<typename T >
const T & updateSourceAreaOffset (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)
 
Log * getLog () const
 
ReportHandler & getReportHandler ()
 
NameMangling & getNameMangling ()
 
const String * findNameManglingPrefix (const String &ident) const
 
template<typename T , typename... Args>
SPtr< T > make (Args &&... args)
 
const TokenPtr & getToken () 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
 
Log * mLog = nullptr
 
TokenPtr mToken
 
Stack< ScannerStackEntry > mScannerStack
 
Stack< ParsingState > mParsingStateStack
 
Stack< ASTPtr > mPreParsedASTStack
 
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: