Ogre::CompositorScriptCompiler Class Reference

Compiler for parsing & lexing .compositor scripts. More...

#include <OgreCompositorScriptCompiler.h>

Inheritance diagram for Ogre::CompositorScriptCompiler:

Inheritance graph
[legend]

List of all members.

Public Member Functions

 CompositorScriptCompiler (void)
 ~CompositorScriptCompiler (void)
virtual const StringgetClientBNFGrammer (void) const
 gets BNF Grammar for Compositor script.
virtual const StringgetClientGrammerName (void) const
 get the name of the Compositor script BNF grammar.
void parseScript (DataStreamPtr &stream, const String &groupName)
 Compile a compositor script from a data stream using a specific resource group name.
bool compile (const String &source, const String &sourceName)
 compile the source - performs 2 passes.
void * operator new (size_t sz, const char *file, int line, const char *func)
 operator new, with debug line info
void * operator new (size_t sz)
void * operator new (size_t sz, void *ptr)
 placement operator new
void * operator new[] (size_t sz, const char *file, int line, const char *func)
 array operator new, with debug line info
void * operator new[] (size_t sz)
void operator delete (void *ptr)
void operator delete (void *ptr, const char *, int, const char *)
void operator delete[] (void *ptr)
void operator delete[] (void *ptr, const char *, int, const char *)

Protected Types

enum  TokenID {
  ID_UNKOWN = 0, ID_TARGET_WIDTH, ID_TARGET_HEIGHT, ID_TARGET_WIDTH_SCALED,
  ID_TARGET_HEIGHT_SCALED, ID_PF_A8R8G8B8, ID_PF_R8G8B8A8, ID_PF_R8G8B8,
  ID_PF_FLOAT16_R, ID_PF_FLOAT16_RGB, ID_PF_FLOAT16_RGBA, ID_PF_FLOAT32_R,
  ID_PF_FLOAT32_RGB, ID_PF_FLOAT32_RGBA, ID_PF_FLOAT16_GR, ID_PF_FLOAT32_GR,
  ID_PREVIOUS, ID_NONE, ID_RENDER_QUAD, ID_CLEAR,
  ID_STENCIL, ID_RENDER_SCENE, ID_CLR_COLOUR, ID_CLR_DEPTH,
  ID_ST_ALWAYS_FAIL, ID_ST_ALWAYS_PASS, ID_ST_LESS, ID_ST_LESS_EQUAL,
  ID_ST_EQUAL, ID_ST_NOT_EQUAL, ID_ST_GREATER_EQUAL, ID_ST_GREATER,
  ID_ST_KEEP, ID_ST_ZERO, ID_ST_REPLACE, ID_ST_INCREMENT,
  ID_ST_DECREMENT, ID_ST_INCREMENT_WRAP, ID_ST_DECREMENT_WRAP, ID_ST_INVERT,
  ID_ON, ID_OFF, ID_TRUE, ID_FALSE,
  ID_AUTOTOKENSTART
}
enum  CompositorScriptSection {
  CSS_NONE, CSS_COMPOSITOR, CSS_TECHNIQUE, CSS_TARGET,
  CSS_PASS
}
 Enum to identify compositor sections. More...
typedef void(CompositorScriptCompiler::* CSC_Action )(void)
typedef std::map
< size_t, CSC_Action
TokenActionMap
typedef
TokenActionMap::iterator 
TokenActionIterator
enum  OperationType {
  otUNKNOWN, otRULE, otAND, otOR,
  otOPTIONAL, otREPEAT, otDATA, otNOT_TEST,
  otINSERT_TOKEN, otEND
}
enum  SystemRuleToken { _no_token_ = SystemTokenBase, _character_, _value_, _no_space_skip_ }
enum  BNF_ID {
  BNF_UNKOWN = 0, BNF_SYNTAX, BNF_RULE, BNF_IDENTIFIER,
  BNF_IDENTIFIER_RIGHT, BNF_IDENTIFIER_CHARACTERS, BNF_ID_BEGIN, BNF_ID_END,
  BNF_CONSTANT_BEGIN, BNF_SET_RULE, BNF_EXPRESSION, BNF_AND_TERM,
  BNF_OR_TERM, BNF_TERM, BNF_TERM_ID, BNF_CONSTANT,
  BNF_OR, BNF_TERMINAL_SYMBOL, BNF_TERMINAL_START, BNF_REPEAT_EXPRESSION,
  BNF_REPEAT_BEGIN, BNF_REPEAT_END, BNF_SET, BNF_SET_BEGIN,
  BNF_SET_END, BNF_NOT_TEST, BNF_NOT_TEST_BEGIN, BNF_CONDITIONAL_TOKEN_INSERT,
  BNF_OPTIONAL_EXPRESSION, BNF_NOT_EXPRESSION, BNF_NOT_CHK, BNF_OPTIONAL_BEGIN,
  BNF_OPTIONAL_END, BNF_NO_TOKEN_START, BNF_SINGLEQUOTE, BNF_SINGLE_QUOTE_EXC,
  BNF_SET_END_EXC, BNF_ANY_CHARACTER, BNF_SPECIAL_CHARACTERS1, BNF_SPECIAL_CHARACTERS2,
  BNF_WHITE_SPACE_CHK, BNF_LETTER, BNF_LETTER_DIGIT, BNF_DIGIT,
  BNF_WHITE_SPACE, BNF_ALPHA_SET, BNF_NUMBER_SET, BNF_SPECIAL_CHARACTER_SET1,
  BNF_SPECIAL_CHARACTER_SET2, BNF_SPECIAL_CHARACTER_SET3, BNF_NOT_CHARS, BNF_AUTOTOKENSTART
}
typedef std::vector
< TokenRule > 
TokenRuleContainer
typedef
TokenRuleContainer::iterator 
TokenRuleIterator
typedef std::vector
< LexemeTokenDef > 
LexemeTokenDefContainer
typedef
LexemeTokenDefContainer::iterator 
LexemeTokenDefIterator
typedef std::map
< String, size_t > 
LexemeTokenMap
typedef
LexemeTokenMap::iterator 
TokenKeyIterator
typedef std::vector
< TokenInst > 
TokenInstContainer
typedef
TokenInstContainer::iterator 
TokenInstIterator
typedef std::map
< size_t, String
LabelContainer
 storage container for string labels defined in source container uses Token index as a key associated with a label

Protected Member Functions

virtual void executeTokenAction (const size_t tokenID)
 Execute an Action associated with a token.
virtual size_t getAutoTokenIDStart () const
 Get the start position of auto generated token IDs.
virtual void setupTokenDefinitions (void)
 Associate all the lexemes used in a material script with their corresponding tokens and actions.
void addLexemeTokenAction (const String &lexeme, const size_t token, const CSC_Action action=0)
void addLexemeAction (const String &lexeme, const CSC_Action action)
void logParseError (const String &error)
void parseOpenBrace (void)
void parseCloseBrace (void)
void parseCompositor (void)
void parseTechnique (void)
void parseTexture (void)
void parseTarget (void)
void parseInput (void)
void parseTargetOutput (void)
void parseOnlyInitial (void)
void parseVisibilityMask (void)
void parseLodBias (void)
void parseMaterialScheme (void)
void parsePass (void)
void parseMaterial (void)
void parseFirstRenderQueue (void)
void parseLastRenderQueue (void)
void parseIdentifier (void)
void parseClearBuffers (void)
void parseClearColourValue (void)
void parseClearDepthValue (void)
void parseClearStencilValue (void)
void parseStencilCheck (void)
void parseStencilFunc (void)
void parseStencilRefVal (void)
void parseStencilMask (void)
void parseStencilFailOp (void)
void parseStencilDepthFailOp (void)
void parseStencilPassOp (void)
void parseStencilTwoSided (void)
StencilOperation extractStencilOp (void)
CompareFunction extractCompareFunc (void)
bool doPass1 ()
 perform pass 1 of compile process scans source for lexemes that can be tokenized and then performs general semantic and context verification on each lexeme before it is tokenized.
bool doPass2 ()
 performs Pass 2 of compile process which is execution of the tokens
const TokenInst & getNextToken (const size_t expectedTokenID=0) const
 Gets the next token from the instruction que.
const TokenInst & getCurrentToken (const size_t expectedTokenID=0) const
 Gets the current token from the instruction que.
bool testNextTokenID (const size_t expectedTokenID) const
 If a next token instruction exist then test if its token ID matches.
bool testCurrentTokenID (const size_t expectedTokenID) const
 If a current token instruction exist then test if its token ID matches.
void skipToken (void) const
 skip to the next token in the pass2 queue.
void replaceToken (void)
 go back to the previous token in the pass2 queue.
float getNextTokenValue (void) const
 Gets the next token's associated floating point value in the instruction que that was parsed from the text source.
float getCurrentTokenValue (void) const
 Gets the current token's associated floating point value in the instruction que that was parsed from the text source.
const StringgetNextTokenLabel (void) const
 Gets the next token's associated text label in the instruction que that was parsed from the text source.
const StringgetCurrentTokenLabel (void) const
 Gets the next token's associated text label in the instruction que that was parsed from the text source.
size_t getNextTokenID (void) const
 Get the next token's ID value.
size_t getCurrentTokenID (void) const
 Get the current token's ID value.
const StringgetNextTokenLexeme (void) const
 Get the next token's lexeme string.
const StringgetCurrentTokenLexeme (void) const
 Get the current token's lexeme string.
size_t getPass2TokenQueCount (void) const
 Gets the number of tokens waiting in the instruction que that need to be processed by an token action in pass 2.
size_t getRemainingTokensForAction (void) const
 Get the number of tokens not processed by action token.
void setPass2TokenQuePosition (size_t pos, const bool activateAction=false)
 Manually set the Pass2 Token que position.
size_t getPass2TokenQuePosition (void) const
 Get the current position in the Pass2 Token Que.
bool setNextActionQuePosition (size_t pos, const bool search=false)
 Set the position of the next token action in the Pass2 Token Que.
size_t addLexemeToken (const String &lexeme, const size_t token, const bool hasAction=false, const bool caseSensitive=false)
 Add a lexeme token association.
void setClientBNFGrammer (void)
 Sets up the parser rules for the client based on the BNF Grammar text passed in.
void findEOL ()
 find the eol character
bool isFloatValue (float &fvalue, size_t &charsize) const
 check to see if the text at the present position in the source is a numerical constant
bool isCharacterLabel (const size_t rulepathIDX)
 Check if source at current position is supposed to be a user defined character label.
bool isLexemeMatch (const String &lexeme, const bool caseSensitive) const
 check to see if the text is in the lexeme text library
bool isEndOfSource () const
 Check if pass 1 has parsed to the end of the source.
bool positionToNextLexeme ()
 position to the next possible valid symbol
bool processRulePath (size_t rulepathIDX)
 process input source text using rulepath to determine allowed tokens
void setActiveContexts (const uint contexts)
 setup ActiveContexts - should be called by subclass to setup initial language contexts
void skipComments ()
 comment specifiers are hard coded
void skipEOL ()
 find end of line marker and move past it
void skipWhiteSpace ()
 skip all the white space which includes spaces and tabs
bool ValidateToken (const size_t rulepathIDX, const size_t activeRuleID)
 check if current position in source has the lexeme text equivalent to the TokenID
void verifyTokenRuleLinks (const String &grammerName)
 scan through all the rules and initialize token definition with index to rules for non-terminal tokens.
void checkTokenActionTrigger (void)
 Checks the last token instruction and if it has an action then it triggers the action of the previously found token having an action.
String getBNFGrammerTextFromRulePath (size_t ruleID, const size_t level=0)
 Get the text representation of the rule path.

Protected Attributes

CompositorScriptContext mScriptContext
TokenState * mClientTokenState
TokenState * mActiveTokenState
 Active token que, definitions, rules currently being used by parser.
size_t mPass2TokenQuePosition
 the location within the token instruction container where pass 2 is
size_t mPreviousActionQuePosition
 the que position of the previous token that had an action.
size_t mNextActionQuePosition
 the que position for the next token that has an action.
const StringmSource
 pointer to the source to be compiled
String mSourceName
 name of the source to be compiled
size_t mEndOfSource
size_t mCurrentLine
size_t mCharPos
 current line number in source being tokenized
size_t mErrorCharPos
 position in current line in source being tokenized
std::map< size_t, float > mConstants
 character position in source where last error occurred
LabelContainer mLabels
bool mLabelIsActive
 flag indicates when a label is being parsed.
size_t mActiveLabelKey
 the key of the active label being built during pass 1.
StringmActiveLabel
 The active label that is receiving characters during pass 1.
bool mNoSpaceSkip
 flag being true indicates that spaces are not to be skipped automatically gets set to false when mLabelIsActive goes to false
bool mNoTerminalToken
 if flag is true then next terminal token is not added to token que if found but does effect rule path flow
size_t mInsertTokenID
 TokenID to insert if next rule finds a terminal token if zero then no token inserted.
uint mActiveContexts
 Active Contexts pattern used in pass 1 to determine which tokens are valid for a certain context.

Static Protected Attributes

static TokenActionMap mTokenActionMap
 Map of Token value as key to an Action.
static const size_t SystemTokenBase = 1000

Classes

struct  CompositorScriptContext
 Struct for holding the script context while parsing. More...


Detailed Description

Compiler for parsing & lexing .compositor scripts.

Definition at line 42 of file OgreCompositorScriptCompiler.h.


Member Typedef Documentation

typedef void(CompositorScriptCompiler::* Ogre::CompositorScriptCompiler::CSC_Action)(void) [protected]

Definition at line 128 of file OgreCompositorScriptCompiler.h.

typedef std::map<size_t, CSC_Action> Ogre::CompositorScriptCompiler::TokenActionMap [protected]

Definition at line 129 of file OgreCompositorScriptCompiler.h.

typedef TokenActionMap::iterator Ogre::CompositorScriptCompiler::TokenActionIterator [protected]

Definition at line 130 of file OgreCompositorScriptCompiler.h.

typedef std::vector<TokenRule> Ogre::Compiler2Pass::TokenRuleContainer [protected, inherited]

Definition at line 173 of file OgreCompiler2Pass.h.

typedef TokenRuleContainer::iterator Ogre::Compiler2Pass::TokenRuleIterator [protected, inherited]

Definition at line 174 of file OgreCompiler2Pass.h.

typedef std::vector<LexemeTokenDef> Ogre::Compiler2Pass::LexemeTokenDefContainer [protected, inherited]

Definition at line 227 of file OgreCompiler2Pass.h.

typedef LexemeTokenDefContainer::iterator Ogre::Compiler2Pass::LexemeTokenDefIterator [protected, inherited]

Definition at line 228 of file OgreCompiler2Pass.h.

typedef std::map<String, size_t> Ogre::Compiler2Pass::LexemeTokenMap [protected, inherited]

Definition at line 230 of file OgreCompiler2Pass.h.

typedef LexemeTokenMap::iterator Ogre::Compiler2Pass::TokenKeyIterator [protected, inherited]

Definition at line 231 of file OgreCompiler2Pass.h.

typedef std::vector<TokenInst> Ogre::Compiler2Pass::TokenInstContainer [protected, inherited]

Definition at line 245 of file OgreCompiler2Pass.h.

typedef TokenInstContainer::iterator Ogre::Compiler2Pass::TokenInstIterator [protected, inherited]

Definition at line 246 of file OgreCompiler2Pass.h.

typedef std::map<size_t, String> Ogre::Compiler2Pass::LabelContainer [protected, inherited]

storage container for string labels defined in source container uses Token index as a key associated with a label

Definition at line 286 of file OgreCompiler2Pass.h.


Member Enumeration Documentation

enum Ogre::CompositorScriptCompiler::TokenID [protected]

Enumerator:
ID_UNKOWN 
ID_TARGET_WIDTH 
ID_TARGET_HEIGHT 
ID_TARGET_WIDTH_SCALED 
ID_TARGET_HEIGHT_SCALED 
ID_PF_A8R8G8B8 
ID_PF_R8G8B8A8 
ID_PF_R8G8B8 
ID_PF_FLOAT16_R 
ID_PF_FLOAT16_RGB 
ID_PF_FLOAT16_RGBA 
ID_PF_FLOAT32_R 
ID_PF_FLOAT32_RGB 
ID_PF_FLOAT32_RGBA 
ID_PF_FLOAT16_GR 
ID_PF_FLOAT32_GR 
ID_PREVIOUS 
ID_NONE 
ID_RENDER_QUAD 
ID_CLEAR 
ID_STENCIL 
ID_RENDER_SCENE 
ID_CLR_COLOUR 
ID_CLR_DEPTH 
ID_ST_ALWAYS_FAIL 
ID_ST_ALWAYS_PASS 
ID_ST_LESS 
ID_ST_LESS_EQUAL 
ID_ST_EQUAL 
ID_ST_NOT_EQUAL 
ID_ST_GREATER_EQUAL 
ID_ST_GREATER 
ID_ST_KEEP 
ID_ST_ZERO 
ID_ST_REPLACE 
ID_ST_INCREMENT 
ID_ST_DECREMENT 
ID_ST_INCREMENT_WRAP 
ID_ST_DECREMENT_WRAP 
ID_ST_INVERT 
ID_ON 
ID_OFF 
ID_TRUE 
ID_FALSE 
ID_AUTOTOKENSTART 

Definition at line 72 of file OgreCompositorScriptCompiler.h.

enum Ogre::CompositorScriptCompiler::CompositorScriptSection [protected]

Enum to identify compositor sections.

Enumerator:
CSS_NONE 
CSS_COMPOSITOR 
CSS_TECHNIQUE 
CSS_TARGET 
CSS_PASS 

Definition at line 107 of file OgreCompositorScriptCompiler.h.

enum Ogre::Compiler2Pass::OperationType [protected, inherited]

Enumerator:
otUNKNOWN 
otRULE 
otAND 
otOR 
otOPTIONAL 
otREPEAT 
otDATA 
otNOT_TEST 
otINSERT_TOKEN 
otEND 

Definition at line 157 of file OgreCompiler2Pass.h.

enum Ogre::Compiler2Pass::SystemRuleToken [protected, inherited]

Enumerator:
_no_token_ 
_character_ 
_value_ 
_no_space_skip_ 

Definition at line 177 of file OgreCompiler2Pass.h.

enum Ogre::Compiler2Pass::BNF_ID [protected, inherited]

Enumerator:
BNF_UNKOWN 
BNF_SYNTAX 
BNF_RULE 
BNF_IDENTIFIER 
BNF_IDENTIFIER_RIGHT 
BNF_IDENTIFIER_CHARACTERS 
BNF_ID_BEGIN 
BNF_ID_END 
BNF_CONSTANT_BEGIN 
BNF_SET_RULE 
BNF_EXPRESSION 
BNF_AND_TERM 
BNF_OR_TERM 
BNF_TERM 
BNF_TERM_ID 
BNF_CONSTANT 
BNF_OR 
BNF_TERMINAL_SYMBOL 
BNF_TERMINAL_START 
BNF_REPEAT_EXPRESSION 
BNF_REPEAT_BEGIN 
BNF_REPEAT_END 
BNF_SET 
BNF_SET_BEGIN 
BNF_SET_END 
BNF_NOT_TEST 
BNF_NOT_TEST_BEGIN 
BNF_CONDITIONAL_TOKEN_INSERT 
BNF_OPTIONAL_EXPRESSION 
BNF_NOT_EXPRESSION 
BNF_NOT_CHK 
BNF_OPTIONAL_BEGIN 
BNF_OPTIONAL_END 
BNF_NO_TOKEN_START 
BNF_SINGLEQUOTE 
BNF_SINGLE_QUOTE_EXC 
BNF_SET_END_EXC 
BNF_ANY_CHARACTER 
BNF_SPECIAL_CHARACTERS1 
BNF_SPECIAL_CHARACTERS2 
BNF_WHITE_SPACE_CHK 
BNF_LETTER 
BNF_LETTER_DIGIT 
BNF_DIGIT 
BNF_WHITE_SPACE 
BNF_ALPHA_SET 
BNF_NUMBER_SET 
BNF_SPECIAL_CHARACTER_SET1 
BNF_SPECIAL_CHARACTER_SET2 
BNF_SPECIAL_CHARACTER_SET3 
BNF_NOT_CHARS 
BNF_AUTOTOKENSTART 

Definition at line 184 of file OgreCompiler2Pass.h.


Constructor & Destructor Documentation

Ogre::CompositorScriptCompiler::CompositorScriptCompiler ( void   ) 

Ogre::CompositorScriptCompiler::~CompositorScriptCompiler ( void   ) 


Member Function Documentation

virtual const String& Ogre::CompositorScriptCompiler::getClientBNFGrammer ( void   )  const [virtual]

gets BNF Grammar for Compositor script.

Implements Ogre::Compiler2Pass.

virtual const String& Ogre::CompositorScriptCompiler::getClientGrammerName ( void   )  const [virtual]

get the name of the Compositor script BNF grammar.

Implements Ogre::Compiler2Pass.

void Ogre::CompositorScriptCompiler::parseScript ( DataStreamPtr stream,
const String groupName 
)

Compile a compositor script from a data stream using a specific resource group name.

Parameters:
stream Weak reference to a data stream which is the source of the material script
groupName The name of the resource group that resources which are parsed are to become a member of. If this group is loaded or unloaded, then the resources discovered in this script will be loaded / unloaded with it.

Definition at line 64 of file OgreCompositorScriptCompiler.h.

References Ogre::Compiler2Pass::compile().

virtual void Ogre::CompositorScriptCompiler::executeTokenAction ( const size_t  tokenID  )  [protected, virtual]

Execute an Action associated with a token.

Gets called when the compiler finishes tokenizing a section of the source that has been parsed.

Implements Ogre::Compiler2Pass.

virtual size_t Ogre::CompositorScriptCompiler::getAutoTokenIDStart (  )  const [protected, virtual]

Get the start position of auto generated token IDs.

Implements Ogre::Compiler2Pass.

Definition at line 143 of file OgreCompositorScriptCompiler.h.

virtual void Ogre::CompositorScriptCompiler::setupTokenDefinitions ( void   )  [protected, virtual]

Associate all the lexemes used in a material script with their corresponding tokens and actions.

Implements Ogre::Compiler2Pass.

void Ogre::CompositorScriptCompiler::addLexemeTokenAction ( const String lexeme,
const size_t  token,
const CSC_Action  action = 0 
) [protected]

void Ogre::CompositorScriptCompiler::addLexemeAction ( const String lexeme,
const CSC_Action  action 
) [protected]

Definition at line 148 of file OgreCompositorScriptCompiler.h.

void Ogre::CompositorScriptCompiler::logParseError ( const String error  )  [protected]

void Ogre::CompositorScriptCompiler::parseOpenBrace ( void   )  [protected]