CBNFParser Class Reference

class CBNFParser : public CBase

Base class for parsers that use a BNF tree to parse an input stream.

The BNF tree form used is a variation on Extended BNF described in the XML1.0 specification. The general form of the tree is as follows:

Each node in the tree defines a rule that the input stream must meet to satisfy the grammar.

1. a node type is set to the rule type, as defined in TParserNodeTypes

2. node data stores any string required by the rule: e.g. for a comparison rule, the string to match against

3. the parser allows callback functions to be called either before or after the rule is processed. If these are present, they are stored as attributes of the node.

4. some rules allow sub-rules: for example, the AND rule expects a number of sub-rules, all of which must be successful if the AND rule itself is to succeed. Each sub-rule is represented as a child node of the parent rule. Sub-rules in turn can have sub-rules.

5. reference rule nodes are also allowed: these do not define themselves rules, but direct the parser to another rule. They can link rules to each other and so build rule sequences more complex than a simple tree.

All the top-level rules are stored as attributes of the root node. The attribute type is a string that names the rule; the attribute value is a pointer to the node that implements the rule.

The class supplies functions that encapsulate adding rules appropriately to the tree. The parser provider creates a derived class that implements the virtual method TreeL() that uses these functions to create a BNF rule tree.

The user of the parser initialises the parser with ResetL(), and then passes input data to the parser using ProcessData(). The parser supports partial parsing: the input stream does not have to completed before parsing can begin. As soon as data is added, the parser attempts to parse it.

Inherits from

Public Member Functions
~CBNFParser()
IMPORT_C voidAddComponentAttributeL(CBNFNode &, CBNFNodeAttributeType, TInt)
IMPORT_C voidCommitL()
CBNFNode *CurrentRule()
voidDeleteMark()
IMPORT_C voidMDataProviderObserverReserved1()
IMPORT_C voidMDataProviderObserverReserved2()
voidMark()
HBufC *MarkedL()
HBufC *MarkedWithInitialTextL(const TDesC &)
IMPORT_C CBNFNode *NewBNFL()
IMPORT_C CBNFNode *NewComponentL(TParserNodeTypes, const TDesC &)
IMPORT_C CBNFNode *NewComponentL(TParserNodeTypes, HBufC *, TRuleCallback *, TRuleCallback *)
IMPORT_C CBNFNode *NewComponentL(CBNFNode *, const TDesC &)
IMPORT_C CBNFNode &NewComponentL(CBNFNode &, TParserNodeTypes, const TDesC &)
IMPORT_C CBNFNode &NewComponentL(CBNFNode &, TParserNodeTypes, HBufC *, TRuleCallback *, TRuleCallback *)
IMPORT_C CBNFNode &NewComponentL(CBNFNode *, CBNFNode &, const TDesC &)
IMPORT_C CBNFParser *NewL(CAttributeLookupTable &)
IMPORT_C CBNFNode &NewRuleL(CBNFNode *, const TDesC &, TParserNodeTypes, HBufC *, TRuleCallback *, TRuleCallback *)
IMPORT_C CBNFNode &NewRuleL(CBNFNode *, const TDesC &, TParserNodeTypes, const TDesC &, TRuleCallback *, TRuleCallback *)
TBool OptionalMatched()
IMPORT_C voidProcessDataL(HBufC8 &)
IMPORT_C voidResetL()
TBool RuleMatched()
voidSetAttributeLookupTable(CAttributeLookupTable &)
IMPORT_C voidSetBaseUriL(const TDesC *)
IMPORT_C voidSetDataExpected(TInt)
IMPORT_C voidSetDocumentTypeL(const TDesC &)
IMPORT_C voidSetDocumentTypeL(const TDesC &, const TDesC &)
IMPORT_C voidSetStatus(TInt)
TParseState State()
HBufC *StringL()
TBool Valid()
Protected Member Functions
CBNFParser(CAttributeLookupTable &)
IMPORT_C voidAddRuleCallbackL(CBNFNode &, const TDesC *, TRuleCallback *)
IMPORT_C TBoolAndL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C CAttributeLookupTable &AttributeLUT()
IMPORT_C voidEndConditional(TParserNodeTypes, TBool)
IMPORT_C TBoolExactL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C voidExecutePostRuleCallbackL(CBNFNode &)
IMPORT_C voidExecutePreRuleCallbackL(CBNFNode &)
IMPORT_C voidMarkCallback(CBNFParser &)
IMPORT_C TBoolNMoreL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C TBoolOptionalL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C TBoolOrL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C TBoolParseL()
IMPORT_C TBoolPerformRuleL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C TBoolRangeL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C TBoolReferenceL(CBNFNode &, CFragmentedString::TStringMatch &)
IMPORT_C TBoolSelectL(CBNFNode &, CFragmentedString::TStringMatch &)
voidSetState(TParseState)
IMPORT_C voidStartConditional(TParserNodeTypes)
IMPORT_C CBNFNode *TreeL()
IMPORT_C TBoolWithoutL(CBNFNode &, CFragmentedString::TStringMatch &)
Inherited Functions
CBase::CBase()
CBase::Delete(CBase *)
CBase::Extension_(TUint,TAny *&,TAny *)
CBase::operator new(TUint)
CBase::operator new(TUint,TAny *)
CBase::operator new(TUint,TLeave)
CBase::operator new(TUint,TLeave,TUint)
CBase::operator new(TUint,TUint)
CBase::~CBase()
Protected Member Type Definitions
typedef CStack< CBNFNode, EFalse > CRuleStack
typedefvoid( TRuleCallback
Protected Attributes
CBNFNode *iCurrentRule
CAttributeLookupTable &iLUT
CFragmentedString::TStringMatch iMatched
const TDesC *iMoreCount
const TDesC *iMoreMaximum
const TDesC *iMoreMinimum
TBool iOptionalMatched
TParseState iParsing
const TDesC *iPostRuleCallback
const TDesC *iPreRuleCallback
const TDesC *iRangeEnd
const TDesC *iRangeStart
const TDesC *iReferenceString
CRuleStack iRuleStack
CFragmentedString iString
TBool iStringComplete
CBNFNode *iSubRule
TBool iSubRuleMatched
CBNFNode *iTree

Constructor & Destructor Documentation

CBNFParser(CAttributeLookupTable &)

IMPORT_CCBNFParser(CAttributeLookupTable &aLUT)[protected]

Parameters

CAttributeLookupTable & aLUT

~CBNFParser()

IMPORT_C~CBNFParser()[virtual]

Member Functions Documentation

AddComponentAttributeL(CBNFNode &, CBNFNodeAttributeType, TInt)

IMPORT_C voidAddComponentAttributeL(CBNFNode &aRule,
CBNFNodeAttributeTypeaAttribute,
TIntaInt
)

Parameters

CBNFNode & aRule
CBNFNodeAttributeType aAttribute
TInt aInt

AddRuleCallbackL(CBNFNode &, const TDesC *, TRuleCallback *)

IMPORT_C voidAddRuleCallbackL(CBNFNode &aRule,
const TDesC *aCallbackID,
TRuleCallback *aCallback
)[protected, virtual]

Parameters

CBNFNode & aRule
const TDesC * aCallbackID
TRuleCallback * aCallback

AndL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolAndL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

AttributeLUT()

IMPORT_C CAttributeLookupTable &AttributeLUT()const [protected]

CommitL()

IMPORT_C voidCommitL()

CurrentRule()

CBNFNode *CurrentRule()[inline]

Gets a pointer to the rule node currently being processed. Rule node

DeleteMark()

voidDeleteMark()[inline]

Removes the latest mark. All the marks are stored in a stack and this removes the topmost mark.

EndConditional(TParserNodeTypes, TBool)

IMPORT_C voidEndConditional(TParserNodeTypesaRuleType,
TBoolaSuccess
)[protected, virtual]

Parameters

TParserNodeTypes aRuleType
TBool aSuccess

ExactL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolExactL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

ExecutePostRuleCallbackL(CBNFNode &)

IMPORT_C voidExecutePostRuleCallbackL(CBNFNode &aRule)[protected, virtual]

Parameters

CBNFNode & aRule

ExecutePreRuleCallbackL(CBNFNode &)

IMPORT_C voidExecutePreRuleCallbackL(CBNFNode &aRule)[protected, virtual]

Parameters

CBNFNode & aRule

MDataProviderObserverReserved1()

IMPORT_C voidMDataProviderObserverReserved1()[virtual]

MDataProviderObserverReserved2()

IMPORT_C voidMDataProviderObserverReserved2()[virtual]

Mark()

voidMark()[inline]

Set a mark to the current position of the input stream.

The mark acts as a tag in the stream currently being processed. As we process further along the stream after adding the mark, we can perform a rollback to the most previously set mark and start processing again (e.g. OR rule works this way). The string fragments won't be consumed (deleted) until all the marks on a fragment (and fragments before that) are deleted.

MarkCallback(CBNFParser &)

IMPORT_C voidMarkCallback(CBNFParser &aParser)[protected, static]

Parameters

CBNFParser & aParser

MarkedL()

HBufC *MarkedL()[inline]

Get string between the "cursor position" and the latest mark on the stream.

Pointer to the string from the previous mark on to the current position of processed string. OWNERSHIP OF THE STRING GIVEN TO THE CALLER.

MarkedWithInitialTextL(const TDesC &)

HBufC *MarkedWithInitialTextL(const TDesC &aInitialText)[inline]

Gets the marked string with a string added before the mached string. MarkedL()

A string cosisting of aInitialText appended with the marked string. OWNERSHIP OF THE CONSTRUCTED STRING IS GIVEN TO THE CALLER.

Parameters

const TDesC & aInitialText

NMoreL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolNMoreL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

NewBNFL()

IMPORT_C CBNFNode *NewBNFL()

NewComponentL(TParserNodeTypes, const TDesC &)

IMPORT_C CBNFNode *NewComponentL(TParserNodeTypesaRuleType,
const TDesC &aData
)

Parameters

TParserNodeTypes aRuleType
const TDesC & aData

NewComponentL(TParserNodeTypes, HBufC *, TRuleCallback *, TRuleCallback *)

IMPORT_C CBNFNode *NewComponentL(TParserNodeTypesaRuleType,
HBufC *aData = NULL,
TRuleCallback *aPreRule = NULL,
TRuleCallback *aPostRule = NULL
)

Parameters

TParserNodeTypes aRuleType
HBufC * aData = NULL
TRuleCallback * aPreRule = NULL
TRuleCallback * aPostRule = NULL

NewComponentL(CBNFNode *, const TDesC &)

IMPORT_C CBNFNode *NewComponentL(CBNFNode *aRootRule,
const TDesC &aRuleName
)

Parameters

CBNFNode * aRootRule
const TDesC & aRuleName

NewComponentL(CBNFNode &, TParserNodeTypes, const TDesC &)

IMPORT_C CBNFNode &NewComponentL(CBNFNode &aParentRule,
TParserNodeTypesaRuleType,
const TDesC &aData
)

Parameters

CBNFNode & aParentRule
TParserNodeTypes aRuleType
const TDesC & aData

NewComponentL(CBNFNode &, TParserNodeTypes, HBufC *, TRuleCallback *, TRuleCallback *)

IMPORT_C CBNFNode &NewComponentL(CBNFNode &aParentRule,
TParserNodeTypesaRuleType,
HBufC *aData = NULL,
TRuleCallback *aPreRule = NULL,
TRuleCallback *aPostRule = NULL
)

Parameters

CBNFNode & aParentRule
TParserNodeTypes aRuleType
HBufC * aData = NULL
TRuleCallback * aPreRule = NULL
TRuleCallback * aPostRule = NULL

NewComponentL(CBNFNode *, CBNFNode &, const TDesC &)

IMPORT_C CBNFNode &NewComponentL(CBNFNode *aRootRule,
CBNFNode &aParentRule,
const TDesC &aRuleName
)

Parameters

CBNFNode * aRootRule
CBNFNode & aParentRule
const TDesC & aRuleName

NewL(CAttributeLookupTable &)

IMPORT_C CBNFParser *NewL(CAttributeLookupTable &aLUT)[static]

Parameters

CAttributeLookupTable & aLUT

NewRuleL(CBNFNode *, const TDesC &, TParserNodeTypes, HBufC *, TRuleCallback *, TRuleCallback *)

IMPORT_C CBNFNode &NewRuleL(CBNFNode *aRootRule,
const TDesC &aRuleName,
TParserNodeTypesaRuleType,
HBufC *aData,
TRuleCallback *aPreRule,
TRuleCallback *aPostRule
)

Parameters

CBNFNode * aRootRule
const TDesC & aRuleName
TParserNodeTypes aRuleType
HBufC * aData
TRuleCallback * aPreRule
TRuleCallback * aPostRule

NewRuleL(CBNFNode *, const TDesC &, TParserNodeTypes, const TDesC &, TRuleCallback *, TRuleCallback *)

IMPORT_C CBNFNode &NewRuleL(CBNFNode *aRootRule,
const TDesC &aRuleName,
TParserNodeTypesaRuleType,
const TDesC &aData,
TRuleCallback *aPreRule,
TRuleCallback *aPostRule
)

Parameters

CBNFNode * aRootRule
const TDesC & aRuleName
TParserNodeTypes aRuleType
const TDesC & aData
TRuleCallback * aPreRule
TRuleCallback * aPostRule

OptionalL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolOptionalL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

OptionalMatched()

TBool OptionalMatched()const [inline]

Tests if an Optional node sub-rule matched.

True if the sub- rule matched; otherwise false

OrL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolOrL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

ParseL()

IMPORT_C TBoolParseL()[protected]

PerformRuleL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolPerformRuleL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

ProcessDataL(HBufC8 &)

IMPORT_C voidProcessDataL(HBufC8 &aData)[virtual]

Parameters

HBufC8 & aData

RangeL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolRangeL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

ReferenceL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolReferenceL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

ResetL()

IMPORT_C voidResetL()[virtual]

RuleMatched()

TBool RuleMatched()const [inline]

Tests if the used rule matched.

This is typically used in post-rule callbacks.

True if the used rule matched; otherwise false

SelectL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolSelectL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

SetAttributeLookupTable(CAttributeLookupTable &)

voidSetAttributeLookupTable(CAttributeLookupTable &aAttributeLookupTable)

Parameters

CAttributeLookupTable & aAttributeLookupTable

SetBaseUriL(const TDesC *)

IMPORT_C voidSetBaseUriL(const TDesC *aBaseUri)[virtual]

Parameters

const TDesC * aBaseUri

SetDataExpected(TInt)

IMPORT_C voidSetDataExpected(TInt)[virtual]

Parameters

TInt

SetDocumentTypeL(const TDesC &)

IMPORT_C voidSetDocumentTypeL(const TDesC &)[virtual]

Parameters

const TDesC &

SetDocumentTypeL(const TDesC &, const TDesC &)

IMPORT_C voidSetDocumentTypeL(const TDesC &,
const TDesC &
)[virtual]

Parameters

const TDesC &
const TDesC &

SetState(TParseState)

voidSetState(TParseStateaState)[protected, inline]

Sets the parser state.

Parameters

TParseState aStateParser state

SetStatus(TInt)

IMPORT_C voidSetStatus(TIntaStatus =  KErrNone )[virtual]

Parameters

TInt aStatus =  KErrNone

StartConditional(TParserNodeTypes)

IMPORT_C voidStartConditional(TParserNodeTypesaRuleType)[protected, virtual]

Parameters

TParserNodeTypes aRuleType

State()

TParseState State()const [inline]

Get the current state of the parser. Parser state

StringL()

HBufC *StringL()const [inline]

Concatenates the rest of the input stream (which hasn't yet been processed) into a single string. The ownership of the string is given to the caller. String containing the remaining data to be parsed. OWNERSHIP PASSED TO CALLED.

TreeL()

IMPORT_C CBNFNode *TreeL()[protected, virtual]

Valid()

TBool Valid()const [inline]

Checks if the input stream was completely processed ETrue if all of the data was processed, EFalse if the data didn't match to the parsing rules

WithoutL(CBNFNode &, CFragmentedString::TStringMatch &)

IMPORT_C TBoolWithoutL(CBNFNode &aRule,
CFragmentedString::TStringMatch &aMatched
)[protected, virtual]

Parameters

CBNFNode & aRule
CFragmentedString::TStringMatch & aMatched

Member Type Definitions Documentation

Typedef CRuleStack

typedef CStack< CBNFNode, EFalse >CRuleStack[protected]

Defines a type to handle a stack of rules.

Typedef TRuleCallback

typedef void(TRuleCallback[protected]

Type definition for a callback function pointer Callback functions need to get a reference to the parser as parameter and they need to be static.

Member Data Documentation

CBNFNode * iCurrentRule

CBNFNode *iCurrentRule[protected]

The BNF rule that is currently being processed.

CAttributeLookupTable & iLUT

CAttributeLookupTable &iLUT[protected]

Storage object for all the attributes and identifiers in a tree

CFragmentedString::TStringMatch iMatched

CFragmentedString::TStringMatch iMatched[protected]

Input stream matched rule flag.

const TDesC * iMoreCount

const TDesC *iMoreCount[protected]

Stores attribute identifier for nmore count attributes.

const TDesC * iMoreMaximum

const TDesC *iMoreMaximum[protected]

Stores attribute identifier for nmore maximum attributes.

const TDesC * iMoreMinimum

const TDesC *iMoreMinimum[protected]

Stores attribute identifier for nmore minimum attributes.

TBool iOptionalMatched

TBool iOptionalMatched[protected]

Flag that indicates when returning to a rule in the rulestack if an optional rule matched correctly.

TParseState iParsing

TParseState iParsing[protected]

Parser state.

const TDesC * iPostRuleCallback

const TDesC *iPostRuleCallback[protected]

Stores attribute identifier for post-rule callback attributes.

const TDesC * iPreRuleCallback

const TDesC *iPreRuleCallback[protected]

Stores attribute identifier for pre-rule callback attributes.

const TDesC * iRangeEnd

const TDesC *iRangeEnd[protected]

Stores attribute identifier for range end attributes.

const TDesC * iRangeStart

const TDesC *iRangeStart[protected]

Stores attribute identifier for range start attributes.

const TDesC * iReferenceString

const TDesC *iReferenceString[protected]

Stores attribute identifier for reference string attributes.

CRuleStack iRuleStack

CRuleStack iRuleStack[protected]

A stack of rules from iTree which are waiting to be completed. The stack basically holds the path along the rule tree.

CFragmentedString iString

CFragmentedString iString[protected]

An utility object which stores all the buffers passed into the parser and represents them as if they would form a single, continuous string. This class also performs the actual physical matching/selection of the strings and holds the marks set onto the string.

TBool iStringComplete

TBool iStringComplete[protected]

Flag indicating if the input stream has been completely processed.

CBNFNode * iSubRule

CBNFNode *iSubRule[protected]

The child rule we are returning from (if any). If this is NULL we are new to this BNF rule.

TBool iSubRuleMatched

TBool iSubRuleMatched[protected]

Flag that indicates when returning to a rule in the rulestack if the child rule matched correctly.

CBNFNode * iTree

CBNFNode *iTree[protected]

The BNF tree the parser is using to parse the input stream.