cmLex.h/c : Added optional quoted character token recognizer.
This commit is contained in:
parent
0a71501780
commit
83314506d7
19
cmLex.c
19
cmLex.c
@ -120,6 +120,8 @@ cmRC_t _cmLexError( cmLex* p, unsigned rc, const char* fmt, ... )
|
||||
return rc;
|
||||
}
|
||||
|
||||
// Locate 'keyStr' in cp[cn] and return the index into cp[cn] of the character
|
||||
// following the last char in 'keyStr'. If keyStr is not found return cmInvalidIdx.
|
||||
unsigned _cmLexScanTo( const cmChar_t* cp, unsigned cn, const cmChar_t* keyStr )
|
||||
{
|
||||
unsigned i = 0;
|
||||
@ -336,6 +338,20 @@ unsigned _cmLexQStrMatcher( cmLex* p, const cmChar_t* cp, unsigned cn, const cmC
|
||||
return 0;
|
||||
}
|
||||
|
||||
unsigned _cmLexQCharMatcher( cmLex* p, const cmChar_t* cp, unsigned cn, const cmChar_t* keyStr )
|
||||
{
|
||||
unsigned i = 0;
|
||||
if( i >= cn || cp[i]!='\'' )
|
||||
return 0;
|
||||
|
||||
i+=2;
|
||||
|
||||
if( i >= cn || cp[i]!='\'')
|
||||
return 0;
|
||||
|
||||
return 3;
|
||||
}
|
||||
|
||||
|
||||
unsigned _cmLexBlockCmtMatcher( cmLex* p, const cmChar_t* cp, unsigned cn, const cmChar_t* keyStr )
|
||||
{
|
||||
@ -474,6 +490,9 @@ cmLexH cmLexInit( const cmChar_t* cp, unsigned cn, unsigned flags, cmRpt_t* rpt
|
||||
_cmLexInstallMatcher( p, kBlockCmtLexTId, _cmLexBlockCmtMatcher, NULL, NULL );
|
||||
_cmLexInstallMatcher( p, kLineCmtLexTId, _cmLexLineCmtMatcher, NULL, NULL );
|
||||
|
||||
if( cmIsFlag(flags,kReturnQCharLexFl) )
|
||||
_cmLexInstallMatcher( p, kQCharLexTId, _cmLexQCharMatcher, NULL, NULL );
|
||||
|
||||
h.h = p;
|
||||
|
||||
_cmLexReset(p);
|
||||
|
12
cmLex.h
12
cmLex.h
@ -20,9 +20,10 @@ enum
|
||||
kHexLexTId, // 6 hexidecimal integer
|
||||
kIdentLexTId, // 7 identifier
|
||||
kQStrLexTId, // 8 quoted string
|
||||
kBlockCmtLexTId, // 9 block comment
|
||||
kLineCmtLexTId, // 10 line comment
|
||||
kUserLexTId // 11 user registered token (See cmLexRegisterToken().)
|
||||
kQCharLexTId, // 9 quoted char
|
||||
kBlockCmtLexTId, // 10 block comment
|
||||
kLineCmtLexTId, // 11 line comment
|
||||
kUserLexTId // 12 user registered token (See cmLexRegisterToken().)
|
||||
};
|
||||
|
||||
// Lexer control flags used with cmLexInit().
|
||||
@ -31,7 +32,8 @@ enum
|
||||
kReturnSpaceLexFl = 0x01, //< Return space tokens
|
||||
kReturnCommentsLexFl = 0x02, //< Return comment tokens
|
||||
kReturnUnknownLexFl = 0x04, //< Return unknown tokens
|
||||
kUserDefPriorityLexFl= 0x08 //< User defined tokens take priority even if a kIdentLexTId token has a longer match
|
||||
kReturnQCharLexFl = 0x08, //< Return quoted characters
|
||||
kUserDefPriorityLexFl= 0x10 //< User defined tokens take priority even if a kIdentLexTId token has a longer match
|
||||
};
|
||||
|
||||
// cmLex result codes.
|
||||
@ -84,7 +86,7 @@ cmRC_t cmLexSetFile( cmLexH h, const cmChar_t* fn );
|
||||
cmRC_t cmLexRegisterToken( cmLexH h, unsigned id, const cmChar_t* token );
|
||||
|
||||
// Register a user defined token recognition function. This function should return the count
|
||||
// of initial, consecutive, characters in 'cp' which match its token pattern.
|
||||
// of initial, consecutive, characters in 'cp[cn]' which match its token pattern.
|
||||
typedef unsigned (*cmLexUserMatcherPtr_t)( const cmChar_t* cp, unsigned cn );
|
||||
|
||||
cmRC_t cmLexRegisterMatcher( cmLexH h, unsigned id, cmLexUserMatcherPtr_t funcPtr );
|
||||
|
Loading…
Reference in New Issue
Block a user