Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Ogre::MaterialScriptCompiler Class Reference

#include <OgreMaterialScriptCompiler.h>

Inheritance diagram for Ogre::MaterialScriptCompiler:

Ogre::Compiler2Pass List of all members.

Public Member Functions

 MaterialScriptCompiler (void)
 ~MaterialScriptCompiler (void)
virtual const StringgetClientBNFGrammer (void)
 gets BNF Grammer for Compositor script.

virtual const StringgetClientGrammerName (void)
 get the name of the BNF grammer.

bool compile (const String &source, const String &sourceName)
 compile the source - performs 2 passes.


Protected Types

typedef void(MaterialScriptCompiler::* MSC_Action )(void)
typedef std::map< size_t,
MSC_Action
TokenActionMap
typedef TokenActionMap::iterator TokenActionIterator
enum  TokenID {
  ID_UNKOWN = 0, ID_OPENBRACE, ID_CLOSEBRACE, ID_VERTEX_PROGRAM,
  ID_FRAGMENT_PROGRAM, ID_MATERIAL, ID_CLONE, ID_TECHNIQUE,
  ID_SET_TEXTURE_ALIAS, ID_LOD_DISTANCES, ID_RECEIVE_SHADOWS, ID_TRANSPARENCY_CASTS_SHADOWS,
  ID_LOD_INDEX, ID_PASS, ID_AMBIENT, ID_DIFFUSE,
  ID_SPECULAR, ID_EMISSIVE, ID_VERTEXCOLOUR, ID_SCENE_BLEND,
  ID_BLEND_ADD, ID_BLEND_MODULATE, ID_COLOUR_BLEND, ID_ALPHA_BLEND,
  ID_BLEND_ONE, ID_BLEND_ZERO, ID_BLEND_DEST_COLOUR, ID_BLEND_SRC_COLOUR,
  ID_BLEND_ONCE_MINUS_DEST_COLOUR, ID_BLEND_ONE_MINUS_SRC_COLOUR, ID_BLEND_DEST_ALPHA, ID_BLEND_SRC_ALPHA,
  ID_BLEND_ONE_MINUS_DEST_ALPHA, ID_BLEND_ONE_MINUS_SRC_ALPHA, ID_DEPTH_CHECK, ID_DEPTH_WRITE,
  ID_ALPHA_REJECTION, ID_DEPTH_FUNC, ID_ALWAYS_FAIL, ID_ALWAYS_PASS,
  ID_LESS_EQUAL, ID_LESS, ID_EQUAL, ID_NOT_EQUAL,
  ID_GREATER_EQUAL, ID_GREATER, ID_COLOUR_WRITE, ID_CULL_HARDWARE,
  ID_CLOCKWISE, ID_ANTICLOCKWISE, ID_CULL_NONE, ID_CULL_SOFTWARE,
  ID_CULL_BACK, ID_CULL_FRONT, ID_SHADING, ID_FLAT,
  ID_GOURAUD, ID_PHONG, ID_LIGHTING, ID_MAX_LIGHTS,
  ID_FOG_OVERRIDE, ID_POINT_SIZE, ID_POINT_SPRITES, ID_POINT_SIZE_ATTENUATION,
  ID_POINT_SIZE_MIN, ID_POINT_SIZE_MAX, ID_TEXTURE_UNIT, ID_ON,
  ID_OFF, ID_TRUE, ID_FALSE
}
enum  MaterialScriptSection {
  MSS_NONE, MSS_MATERIAL, MSS_TECHNIQUE, MSS_PASS,
  MSS_TEXTUREUNIT, MSS_PROGRAM_REF, MSS_PROGRAM, MSS_DEFAULT_PARAMETERS,
  MSS_TEXTURESOURCE
}
 Enum to identify material sections. More...

typedef std::vector< TokenRule > TokenRuleContainer
typedef TokenRuleContainer::iterator TokenRuleIterator
typedef std::vector< LexemeTokenDef > LexemeTokenDefContainer
typedef LexemeTokenDefContainer::iterator LexemeTokenDefIterator
typedef std::map< std::string,
size_t > 
LexemeTokenMap
typedef LexemeTokenMap::iterator TokenKeyIterator
typedef std::vector< TokenInst > TokenInstContainer
typedef TokenInstContainer::iterator TokenInstIterator
enum  OperationType {
  otUNKNOWN, otRULE, otAND, otOR,
  otOPTIONAL, otREPEAT, otDATA, otNOT_TEST,
  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_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
}

Protected Member Functions

virtual void executeTokenAction (const size_t tokenID)
 Execute an Action associated with a token.

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 MSC_Action action=0)
void logParseError (const String &error)
ColourValue _parseColourValue (void)
CompareFunction convertCompareFunction (void)
void parseOpenBrace (void)
void parseCloseBrace (void)
void parseVertexProgram (void)
void parseFragmentProgram (void)
void parseMaterial (void)
void parseTechnique (void)
void parseTransparencyCastsShadows (void)
void parseReceiveShadows (void)
void parsePass (void)
void parseAmbient (void)
void parseDiffuse (void)
void parseSpecular (void)
void parseEmissive (void)
void parseDepthCheck (void)
void parseDepthWrite (void)
void parseDepthFunc (void)
void parseAlphaRejection (void)
void parseColourWrite (void)
void parseCullHardware (void)
void parseCullSoftware (void)
void parseLighting (void)
void parseMaxLights (void)
void parseShading (void)
void parsePointSize (void)
void parsePointSprites (void)
void parsePointSizeMin (void)
void parsePointSizeMax (void)
void parsePointSizeAttenuation (void)
void parseTextureUnit (void)
void parseTextureCustomParameter (void)
void finishProgramDefinition (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)
 Gets the next token from the instruction que.

const TokenInst & getCurrentToken (void)
 Gets the current token from the instruction que.

bool testNextTokenID (const size_t expectedTokenID)
 If a next token instruction exist then test if its token ID matches.

void replaceToken (void)
float getNextTokenValue (void)
 Gets the next token's associated floating point value in the instruction que that was parsed from the text source.

const StringgetNextTokenLabel (void)
 Gets the next token's associated text label in the instruction que that was parsed from the text source.

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 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 Grammer text passed in.

void findEOL ()
 find the eol charater

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 positionToNextLexeme ()
 position to the next possible valid sysmbol

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)
 Get the text representation of the rule path.


Protected Attributes

MaterialScriptContext mScriptContext
TokenState * mClientTokenState
TokenState * mActiveTokenState
 Active token que, definitions, rules currntly 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.

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

std::map< size_t, float > mConstants
 storage container for constants defined in source container uses Token index as a key associated with a float constant

std::map< size_t, StringmLabels
 storage container for string labels defined in source container uses Token index as a key associated with a label

bool mLabelIsActive
 flag indicates when a label is being parsed.

size_t mActiveLabelKey
 the key of the active label being built 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

uint mActiveContexts
 Active Contexts pattern used in pass 1 to determine which tokens are valid for a certain context.


Static Protected Attributes

TokenRule materialScript_RulePath []
String materialScript_BNF
TokenActionMap mTokenActionMap
 Map of Token value as key to an Action.

const size_t SystemTokenBase = 1000

Member Typedef Documentation

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

Definition at line 185 of file OgreCompiler2Pass.h.

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

Definition at line 186 of file OgreCompiler2Pass.h.

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

Definition at line 188 of file OgreCompiler2Pass.h.

typedef void(MaterialScriptCompiler::* Ogre::MaterialScriptCompiler::MSC_Action)(void) [protected]
 

Definition at line 144 of file OgreMaterialScriptCompiler.h.

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

Definition at line 146 of file OgreMaterialScriptCompiler.h.

typedef std::map<size_t, MSC_Action> Ogre::MaterialScriptCompiler::TokenActionMap [protected]
 

Definition at line 145 of file OgreMaterialScriptCompiler.h.

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

Definition at line 203 of file OgreCompiler2Pass.h.

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

Definition at line 204 of file OgreCompiler2Pass.h.

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

Definition at line 189 of file OgreCompiler2Pass.h.

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

Definition at line 135 of file OgreCompiler2Pass.h.

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

Definition at line 136 of file OgreCompiler2Pass.h.


Member Enumeration Documentation

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

Enumeration values:
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_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 

Definition at line 146 of file OgreCompiler2Pass.h.

enum Ogre::MaterialScriptCompiler::MaterialScriptSection [protected]
 

Enum to identify material sections.

Enumeration values:
MSS_NONE 
MSS_MATERIAL 
MSS_TECHNIQUE 
MSS_PASS 
MSS_TEXTUREUNIT 
MSS_PROGRAM_REF 
MSS_PROGRAM 
MSS_DEFAULT_PARAMETERS 
MSS_TEXTURESOURCE 

Definition at line 85 of file OgreMaterialScriptCompiler.h.

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

Enumeration values:
otUNKNOWN 
otRULE 
otAND 
otOR 
otOPTIONAL 
otREPEAT 
otDATA 
otNOT_TEST 
otEND 

Definition at line 120 of file OgreCompiler2Pass.h.

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

Enumeration values:
_no_token_ 
_character_ 
_value_ 
_no_space_skip_ 

Definition at line 139 of file OgreCompiler2Pass.h.

enum Ogre::MaterialScriptCompiler::TokenID [protected]
 

Enumeration values:
ID_UNKOWN 
ID_OPENBRACE 
ID_CLOSEBRACE 
ID_VERTEX_PROGRAM 
ID_FRAGMENT_PROGRAM 
ID_MATERIAL 
ID_CLONE 
ID_TECHNIQUE 
ID_SET_TEXTURE_ALIAS 
ID_LOD_DISTANCES 
ID_RECEIVE_SHADOWS 
ID_TRANSPARENCY_CASTS_SHADOWS 
ID_LOD_INDEX 
ID_PASS 
ID_AMBIENT 
ID_DIFFUSE 
ID_SPECULAR 
ID_EMISSIVE 
ID_VERTEXCOLOUR 
ID_SCENE_BLEND 
ID_BLEND_ADD 
ID_BLEND_MODULATE 
ID_COLOUR_BLEND 
ID_ALPHA_BLEND 
ID_BLEND_ONE 
ID_BLEND_ZERO 
ID_BLEND_DEST_COLOUR 
ID_BLEND_SRC_COLOUR 
ID_BLEND_ONCE_MINUS_DEST_COLOUR 
ID_BLEND_ONE_MINUS_SRC_COLOUR 
ID_BLEND_DEST_ALPHA 
ID_BLEND_SRC_ALPHA 
ID_BLEND_ONE_MINUS_DEST_ALPHA 
ID_BLEND_ONE_MINUS_SRC_ALPHA 
ID_DEPTH_CHECK 
ID_DEPTH_WRITE 
ID_ALPHA_REJECTION 
ID_DEPTH_FUNC 
ID_ALWAYS_FAIL 
ID_ALWAYS_PASS 
ID_LESS_EQUAL 
ID_LESS 
ID_EQUAL 
ID_NOT_EQUAL 
ID_GREATER_EQUAL 
ID_GREATER 
ID_COLOUR_WRITE 
ID_CULL_HARDWARE 
ID_CLOCKWISE 
ID_ANTICLOCKWISE 
ID_CULL_NONE 
ID_CULL_SOFTWARE 
ID_CULL_BACK 
ID_CULL_FRONT 
ID_SHADING 
ID_FLAT 
ID_GOURAUD 
ID_PHONG 
ID_LIGHTING 
ID_MAX_LIGHTS 
ID_FOG_OVERRIDE 
ID_POINT_SIZE 
ID_POINT_SPRITES 
ID_POINT_SIZE_ATTENUATION 
ID_POINT_SIZE_MIN 
ID_POINT_SIZE_MAX 
ID_TEXTURE_UNIT 
ID_ON 
ID_OFF 
ID_TRUE 
ID_FALSE 

Definition at line 54 of file OgreMaterialScriptCompiler.h.


Constructor & Destructor Documentation

Ogre::MaterialScriptCompiler::MaterialScriptCompiler void   ) 
 

Ogre::MaterialScriptCompiler::~MaterialScriptCompiler void   ) 
 


Member Function Documentation

ColourValue Ogre::MaterialScriptCompiler::_parseColourValue void   )  [protected]
 

void Ogre::Compiler2Pass::addLexemeToken const String lexeme,
const size_t  token,
const bool  hasAction = false,
const bool  caseSensitive = false
[protected, inherited]
 

Add a lexeme token association.

The backend compiler uses the associations between lexeme and token when building the rule base from the BNF script so all associations must be done prior to compiling a source.

Parameters:
lexeme is the name of the token and use when parsing the source to determin a match for a token.
token is the ID associated with the lexeme
hasAction must be set true if the client wants an action triggered when this token is generated
caseSensitive should be set true if lexeme match should use case sensitivity

void Ogre::MaterialScriptCompiler::addLexemeTokenAction const String lexeme,
const size_t  token,
const MSC_Action  action = 0
[protected]
 

void Ogre::Compiler2Pass::checkTokenActionTrigger void   )  [protected, inherited]
 

Checks the last token instruction and if it has an action then it triggers the action of the previously found token having an action.

bool Ogre::Compiler2Pass::compile const String source,
const String sourceName
[inherited]
 

compile the source - performs 2 passes.

First pass is to tokinize, check semantics and context. The second pass is performed by using tokens to look up function implementors and executing them which convert tokens to application specific instructions.

Remarks:
Pass 2 only gets executed if Pass 1 has built enough tokens to complete a rule path and found no errors
Parameters:
source a pointer to the source text to be compiled
Returns:
true if Pass 1 and Pass 2 are successfull false if any errors occur in Pass 1 or Pass 2

CompareFunction Ogre::MaterialScriptCompiler::convertCompareFunction void   )  [protected]
 

bool Ogre::Compiler2Pass::doPass1  )  [protected, inherited]
 

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.

A tokenized instruction list is built to be used by Pass 2. A rule path can trigger Pass 2 execution if enough tokens have been generated in Pass 1. Pass 1 will then pass control to pass 2 temporarily until the current tokens have been consumed.

bool Ogre::Compiler2Pass::doPass2  )  [protected, inherited]
 

performs Pass 2 of compile process which is execution of the tokens

Remarks:
Pass 2 takes the token instructions generated in Pass 1 and builds the application specific instructions along with verifying symantic and context rules that could not be checked in Pass 1.
Pass 2 execution consumes tokens and moves the Pass 2 token instruction position towards the end of the token container. Token execution can insert new tokens into the token container.

virtual void Ogre::MaterialScriptCompiler::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.

void Ogre::Compiler2Pass::findEOL  )  [protected, inherited]
 

find the eol charater

void Ogre::MaterialScriptCompiler::finishProgramDefinition void   )  [protected]
 

String Ogre::Compiler2Pass::getBNFGrammerTextFromRulePath size_t  ruleID  )  [protected, inherited]
 

Get the text representation of the rule path.

This is a good way to way to visually verify that the BNF grammer did compile correctly.

Parameters:
ruleID is the index into the rule path.

virtual const String& Ogre::MaterialScriptCompiler::getClientBNFGrammer void   )  [virtual]
 

gets BNF Grammer for Compositor script.

Implements Ogre::Compiler2Pass.

Definition at line 46 of file OgreMaterialScriptCompiler.h.

References Ogre::String.

virtual const String& Ogre::MaterialScriptCompiler::getClientGrammerName void   )  [virtual]
 

get the name of the BNF grammer.

Implements Ogre::Compiler2Pass.

Definition at line 50 of file OgreMaterialScriptCompiler.h.

References Ogre::String.

const TokenInst& Ogre::Compiler2Pass::getCurrentToken void   )  [protected, inherited]
 

Gets the current token from the instruction que.

const TokenInst& Ogre::Compiler2Pass::getNextToken const size_t  expectedTokenID = 0  )  [protected, inherited]
 

Gets the next token from the instruction que.

If an unkown token is found then an exception is raised but the instruction pointer is still moved passed the unknown token. The subclass should catch the exception, provide an error message, and attempt recovery.

Parameters:
expectedTokenID if set then if tokenID does not match then an exception is raised

const String& Ogre::Compiler2Pass::getNextTokenLabel void   )  [protected, inherited]
 

Gets the next token's associated text label in the instruction que that was parsed from the text source.

If an unkown token is found or no associated label was found then an exception is raised but the instruction pointer is still moved passed the unknown token. The subclass should catch the exception, provide an error message, and attempt recovery.

float Ogre::Compiler2Pass::getNextTokenValue void   )  [protected, inherited]
 

Gets the next token's associated floating point value in the instruction que that was parsed from the text source.

If an unkown token is found or no associated value was found then an exception is raised but the instruction pointer is still moved passed the unknown token. The subclass should catch the exception, provide an error message, and attempt recovery.

size_t Ogre::Compiler2Pass::getPass2TokenQueCount void   )  const [protected, inherited]
 

Gets the number of tokens waiting in the instruction que that need to be processed by an token action in pass 2.

size_t Ogre::Compiler2Pass::getRemainingTokensForAction void   )  const [protected, inherited]
 

Get the number of tokens not processed by action token.

Client Actions should use this method to retreive the number of parameters(tokens) remaining to be processed in the action.

bool Ogre::Compiler2Pass::isCharacterLabel const size_t  rulepathIDX  )  [protected, inherited]
 

Check if source at current position is supposed to be a user defined character label.

A new label is processed when previous operation was not _character_ otherwise the processed character (if match was found) is added to the current label. This allows _character_ operations to be chained together to form a crude regular expression to build a label.

Parameters:
rulepathIDX index into rule path database of token to validate.
Returns:
true if token was found for character label.

bool Ogre::Compiler2Pass::isFloatValue float &  fvalue,
size_t &  charsize
const [protected, inherited]
 

check to see if the text at the present position in the source is a numerical constant

Parameters:
fvalue is a reference that will receive the float value that is in the source
charsize reference to receive number of characters that make of the value in the source
Returns:
true if characters form a valid float representation false if a number value could not be extracted

bool Ogre::Compiler2Pass::isLexemeMatch const String lexeme,
const bool  caseSensitive
const [protected, inherited]
 

check to see if the text is in the lexeme text library

Parameters:
lexeme points to begining of text where a lexem token might exist
caseSensitive set to true if match should be case sensitive
Returns:
true if a matching token could be found in the token type library false if could not be tokenized

void Ogre::MaterialScriptCompiler::logParseError const String error  )  [protected]
 

void Ogre::MaterialScriptCompiler::parseAlphaRejection void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseAmbient void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseCloseBrace void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseColourWrite void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseCullHardware void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseCullSoftware void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseDepthCheck void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseDepthFunc void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseDepthWrite void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseDiffuse void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseEmissive void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseFragmentProgram void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseLighting void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseMaterial void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseMaxLights void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseOpenBrace void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parsePass void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parsePointSize void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parsePointSizeAttenuation void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parsePointSizeMax void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parsePointSizeMin void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parsePointSprites void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseReceiveShadows void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseShading void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseSpecular void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseTechnique void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseTextureCustomParameter void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseTextureUnit void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseTransparencyCastsShadows void   )  [protected]
 

void Ogre::MaterialScriptCompiler::parseVertexProgram void   )  [protected]
 

bool Ogre::Compiler2Pass::positionToNextLexeme  )  [protected, inherited]
 

position to the next possible valid sysmbol

bool Ogre::Compiler2Pass::processRulePath size_t  rulepathIDX  )  [protected, inherited]
 

process input source text using rulepath to determine allowed tokens

Remarks:
the method is reentrant and recursive if a non-terminal token is encountered in the current rule path then the method is called using the new rule path referenced by the non-terminal token Tokens can have the following operation states which effects the flow path of the rule RULE: defines a rule path for the non-terminal token AND: the token is required for the rule to pass OR: if the previous tokens failed then try these ones OPTIONAL: the token is optional and does not cause the rule to fail if the token is not found REPEAT: the token is required but there can be more than one in a sequence DATA: Used by a previous token ie for character sets NOTTEST: performs negative lookahead ie make sure the next token is not of a certain type END: end of the rule path - the method returns the succuss of the rule
Parameters:
rulepathIDX index into an array of Token Rules that define a rule path to be processed
Returns:
true if rule passed - all required tokens found false if one or more tokens required to complete the rule were not found

void Ogre::Compiler2Pass::replaceToken void   )  [protected, inherited]
 

void Ogre::Compiler2Pass::setActiveContexts const uint  contexts  )  [protected, inherited]
 

setup ActiveContexts - should be called by subclass to setup initial language contexts

Definition at line 405 of file OgreCompiler2Pass.h.

References Ogre::uint.

void Ogre::Compiler2Pass::setClientBNFGrammer void   )  [protected, inherited]
 

sets up the parser rules for the client based on the BNF Grammer text passed in.

Raises an exception if the grammer did not compile successfully. This method gets called when a call to compile occurs and no compiled BNF grammer exists, otherwise nothing will happen since the compiler has no rules to work with. The grammer only needs to be set once during the lifetime of the compiler unless the grammer changes. BNF Grammer rules are cached once the BNF grammer source is compiled. The client should never have to call this method directly.

virtual void Ogre::MaterialScriptCompiler::setupTokenDefinitions void   )  [protected, virtual]
 

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

Implements Ogre::Compiler2Pass.

void Ogre::Compiler2Pass::skipComments  )  [protected, inherited]
 

comment specifiers are hard coded

void Ogre::Compiler2Pass::skipEOL  )  [protected, inherited]
 

find end of line marker and move past it

void Ogre::Compiler2Pass::skipWhiteSpace  )  [protected, inherited]
 

skip all the white space which includes spaces and tabs

bool Ogre::Compiler2Pass::testNextTokenID const size_t  expectedTokenID  )  [protected, inherited]
 

If a next token instruction exist then test if its token ID matches.

This method is usefull for peeking ahead during pass 2 to see if a certain token exists.

Parameters:
expectedTokenID is the ID of the token to match.

bool Ogre::Compiler2Pass::ValidateToken const size_t  rulepathIDX,
const size_t  activeRuleID
[protected, inherited]
 

check if current position in source has the lexeme text equivalent to the TokenID

Parameters:
rulepathIDX index into rule path database of token to validate
activeRuleID index of non-terminal rule that generated the token
Returns:
true if token was found false if token lexeme text does not match the source text if token is non-terminal then processRulePath is called

void Ogre::Compiler2Pass::verifyTokenRuleLinks const String grammerName  )  [protected, inherited]
 

scan through all the rules and initialize token definition with index to rules for non-terminal tokens.

Gets called when internal grammer is being verified or after client grammer has been parsed.

Parameters:
grammerName is the name of the grammer the token rules are for


Member Data Documentation

uint Ogre::Compiler2Pass::mActiveContexts [protected, inherited]
 

Active Contexts pattern used in pass 1 to determine which tokens are valid for a certain context.

Definition at line 255 of file OgreCompiler2Pass.h.

size_t Ogre::Compiler2Pass::mActiveLabelKey [protected, inherited]
 

the key of the active label being built during pass 1.

a new key is calculated when mLabelIsActive switches from false to true

Definition at line 246 of file OgreCompiler2Pass.h.

TokenState* Ogre::Compiler2Pass::mActiveTokenState [protected, inherited]
 

Active token que, definitions, rules currntly being used by parser.

Definition at line 218 of file OgreCompiler2Pass.h.

String Ogre::MaterialScriptCompiler::materialScript_BNF [static, protected]
 

Definition at line 142 of file OgreMaterialScriptCompiler.h.

TokenRule Ogre::MaterialScriptCompiler::materialScript_RulePath[] [static, protected]
 

Definition at line 140 of file OgreMaterialScriptCompiler.h.

size_t Ogre::Compiler2Pass::mCharPos [protected, inherited]
 

current line number in source being tokenized

Definition at line 233 of file OgreCompiler2Pass.h.

TokenState* Ogre::Compiler2Pass::mClientTokenState [protected, inherited]
 

Definition at line 215 of file OgreCompiler2Pass.h.

std::map<size_t, float> Ogre::Compiler2Pass::mConstants [protected, inherited]
 

storage container for constants defined in source container uses Token index as a key associated with a float constant

Definition at line 237 of file OgreCompiler2Pass.h.

size_t Ogre::Compiler2Pass::mCurrentLine [protected, inherited]
 

Definition at line 232 of file OgreCompiler2Pass.h.

size_t Ogre::Compiler2Pass::mEndOfSource [protected, inherited]
 

Definition at line 230 of file OgreCompiler2Pass.h.

bool Ogre::Compiler2Pass::mLabelIsActive [protected, inherited]
 

flag indicates when a label is being parsed.

It gets set false when a terminal token not of _character_ is encountered

Definition at line 243 of file OgreCompiler2Pass.h.

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

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

Definition at line 240 of file OgreCompiler2Pass.h.

bool Ogre::Compiler2Pass::mNoSpaceSkip [protected, inherited]
 

flag being true indicates that spaces are not to be skipped automatically gets set to false when mLabelIsActive goes to false

Definition at line 249 of file OgreCompiler2Pass.h.

bool Ogre::Compiler2Pass::mNoTerminalToken [protected, inherited]
 

if flag is true then next terminal token is not added to token que if found but does effect rule path flow

Definition at line 252 of file OgreCompiler2Pass.h.

size_t Ogre::Compiler2Pass::mPass2TokenQuePosition [protected, inherited]
 

the location within the token instruction container where pass 2 is

Definition at line 220 of file OgreCompiler2Pass.h.

size_t Ogre::Compiler2Pass::mPreviousActionQuePosition [protected, inherited]
 

the que position of the previous token that had an action.

A token's action is fired on the next token having an action.

Definition at line 224 of file OgreCompiler2Pass.h.

MaterialScriptContext Ogre::MaterialScriptCompiler::mScriptContext [protected]
 

Definition at line 137 of file OgreMaterialScriptCompiler.h.

const String* Ogre::Compiler2Pass::mSource [protected, inherited]
 

pointer to the source to be compiled

Definition at line 227 of file OgreCompiler2Pass.h.

String Ogre::Compiler2Pass::mSourceName [protected, inherited]
 

name of the source to be compiled

Definition at line 229 of file OgreCompiler2Pass.h.

TokenActionMap Ogre::MaterialScriptCompiler::mTokenActionMap [static, protected]
 

Map of Token value as key to an Action.

An Action converts tokens into the final format. All instances use the same Token Action Map.

Definition at line 151 of file OgreMaterialScriptCompiler.h.

const size_t Ogre::Compiler2Pass::SystemTokenBase = 1000 [static, protected, inherited]
 

Definition at line 138 of file OgreCompiler2Pass.h.


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

Copyright © 2000-2005 by The OGRE Team
Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.
Last modified Sun Mar 12 14:39:53 2006