本文整理汇总了C++中readIdentifier函数的典型用法代码示例。如果您正苦于以下问题:C++ readIdentifier函数的具体用法?C++ readIdentifier怎么用?C++ readIdentifier使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了readIdentifier函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tagNonTerminal
void CompilationEngine::compileClassVarDec()
{
/* ('static' | 'field') type varName (',' varName)* ';' */
tagNonTerminal("classVarDec");
if (jt.keyword() == Keyword::kFIELD)
readKeyword("field", Keyword::kFIELD);
else
readKeyword("static", Keyword::kSTATIC);
nextToken();
readType();
nextToken();
readIdentifier();
nextToken();
while (jt.tokenType() == TokenType::kSYMBOL && jt.symbol() == ',') {
readSymbol(',');
nextToken();
readIdentifier();
nextToken();
}
readSymbol(';');
untagNonTerminal("classVarDec");
nextToken();
}
示例2: readIdentifier
void CompilationEngine::compileSubroutineCall(string subName)
{
/*
subroutineName '(' expressionList ')' |
(className | varName) '.' subroutineName '(' expression ')'
*/
string oldTok = jt.getToken();
jt.setToken(subName);
readIdentifier();
jt.setToken(oldTok);
if (jt.tokenType() == TokenType::kSYMBOL && jt.symbol() == '(') {
readSymbol('(');
nextToken();
compileExpressionList();
readSymbol(')');
} else {
readSymbol('.');
nextToken();
readIdentifier();
nextToken();
readSymbol('(');
nextToken();
compileExpressionList();
readSymbol(')');
}
nextToken();
}
示例3: findSchemeTags
static void findSchemeTags (void)
{
vString *name = vStringNew ();
const unsigned char *line;
while ((line = readLineFromInputFile ()) != NULL)
{
const unsigned char *cp = line;
if (cp [0] == '(' &&
(cp [1] == 'D' || cp [1] == 'd') &&
(cp [2] == 'E' || cp [2] == 'e') &&
(cp [3] == 'F' || cp [3] == 'f'))
{
while (*cp != '\0' && !isspace (*cp))
cp++;
/* Skip over open parens and white space */
do {
while (*cp != '\0' && (isspace (*cp) || *cp == '('))
cp++;
if (*cp == '\0')
cp = line = readLineFromInputFile ();
else
break;
} while (line);
if (line == NULL)
break;
readIdentifier (name, cp);
makeSimpleTag (name, SchemeKinds, K_FUNCTION);
}
if (cp [0] == '(' &&
(cp [1] == 'S' || cp [1] == 's') &&
(cp [2] == 'E' || cp [2] == 'e') &&
(cp [3] == 'T' || cp [3] == 't') &&
(cp [4] == '!') &&
(isspace (cp [5]) || cp[5] == '\0'))
{
cp += 5;
/* Skip over white space */
do {
while (*cp != '\0' && isspace (*cp))
cp++;
if (*cp == '\0')
cp = line = readLineFromInputFile ();
else
break;
} while (line);
if (line == NULL)
break;
readIdentifier (name, cp);
makeSimpleTag (name, SchemeKinds, K_SET);
}
}
vStringDelete (name);
}
示例4: directiveDefine
static int directiveDefine (const int c, bool undef)
{
int r = CORK_NIL;
if (cppIsident1 (c))
{
bool parameterized;
int nc;
readIdentifier (c, Cpp.directive.name);
nc = getcAndCollect ();
parameterized = (nc == '(');
if (parameterized)
{
cppStartCollectingSignature ();
while (nc != EOF)
{
int lastC = nc;
nc = getcAndCollect ();
if (nc == '\n' && lastC != '\\')
break;
}
cppStopCollectingSignature ();
}
ungetcAndCollect (nc);
if (! isIgnore ())
makeDefineTag (vStringValue (Cpp.directive.name), parameterized, undef);
}
Cpp.directive.state = DRCTV_NONE;
return r;
}
示例5: switch
void CompilationEngine::readType()
{
if (jt.tokenType() == TokenType::kKEYWORD) {
switch (jt.keyword()) {
case Keyword::kINT:
readKeyword("int", Keyword::kINT);
break;
case Keyword::kCHAR:
readKeyword("char", Keyword::kCHAR);
break;
case Keyword::kBOOLEAN:
readKeyword("boolean", Keyword::kBOOLEAN);
break;
default:
break;
}
} else {
readIdentifier();
}
}
示例6: findVerilogTags
static void findVerilogTags (void)
{
vString *const name = vStringNew ();
volatile bool newStatement = true;
volatile int c = '\0';
exception_t exception = (exception_t) setjmp (Exception);
if (exception == ExceptionNone) while (c != EOF)
{
c = vGetc ();
switch (c)
{
case ';':
case '\n':
newStatement = true;
break;
case ' ':
case '\t':
break;
default:
if (newStatement && readIdentifier (name, c))
findTag (name);
newStatement = false;
break;
}
}
vStringDelete (name);
}
示例7: processTypedef
static void processTypedef (tokenInfo *const token)
{
/*Note: At the moment, only identifies typedef name and not its contents */
int c;
/* Get identifiers */
c = skipWhite (vGetc ());
while (isIdentifierCharacter (c))
{
readIdentifier (token, c);
c = skipWhite (vGetc ());
}
/* Skip bus width definition */
if (c == '[')
{
skipPastMatch ("[]");
c = skipWhite (vGetc ());
}
/* Skip typedef contents */
if (c == '{')
{
skipPastMatch ("{}");
c = skipWhite (vGetc ());
}
/* Skip past class parameter override */
if (c == '#')
{
c = skipWhite (vGetc ());
if (c == '(')
{
skipPastMatch ("()");
}
c = skipWhite (vGetc ());
}
/* Read new typedef identifier */
if (isIdentifierCharacter (c))
{
readIdentifier (token, c);
}
/* Use last identifier to create tag */
createTag (token);
}
示例8: searchChild
QString NSParser::readVar(Symbol* symbol)
{
QString varName;
Symbol* identifier = searchChild(symbol, SYM_IDENTIFIER);
if (identifier)
varName = readIdentifier(identifier);
return varName;
}
示例9: tagNameList
static void tagNameList (const vhdlKind kind, int c)
{
Assert (isIdentifierCharacter (c));
if (isIdentifierCharacter (c))
{
readIdentifier (TagName, c);
makeSimpleTag (TagName, VhdlKinds, kind);
}
}
示例10: findVerilogTags
static void findVerilogTags (void)
{
tokenInfo *const token = newToken ();
int c = '\0';
currentContext = newToken ();
while (c != EOF)
{
c = vGetc ();
c = skipWhite (c);
switch (c)
{
/* Store current block name whenever a : is found
* This is used later by any tag type that requires this information
* */
case ':':
vStringCopy (currentContext->blockName, token->name);
break;
/* Skip interface modport port declarations */
case '(':
if (currentContext && currentContext->lastKind == K_MODPORT)
{
skipPastMatch ("()");
}
break;
/* Drop context on prototypes because they don't have an end
* statement */
case ';':
if (currentContext->scope && currentContext->scope->prototype)
{
verbose ("Dropping context %s\n", vStringValue (currentContext->name));
currentContext = popToken (currentContext);
currentContext->prototype = FALSE;
}
/* Prototypes end at the end of statement */
if (currentContext->prototype)
{
currentContext->prototype = FALSE;
}
break;
default :
if (isIdentifierCharacter (c))
{
readIdentifier (token, c);
updateKind (token);
findTag (token);
}
}
}
deleteToken (token);
pruneTokens (currentContext);
currentContext = NULL;
}
示例11: findTag
static void findTag (vString *const name)
{
int c = '\0';
vhdlKind kind;
vStringCopyToLower (Keyword, name);
kind = (vhdlKind)lookupKeyword (vStringValue (Keyword), Lang_vhdl);
if (kind == K_UNDEFINED)
{
c = skipWhite (vGetc ());
vStringCopyS(Lastname,vStringValue(name));
if (c == ':')
{
c = skipWhite (vGetc ());
if (isIdentifierCharacter (c))
{
readIdentifier (name, c);
vStringCopyToLower (Keyword, name);
lookupKeyword (vStringValue (Keyword), Lang_vhdl);
kind = (vhdlKind)lookupKeyword (vStringValue (Keyword), Lang_vhdl);
if (kind == K_PROCESS || kind == K_BLOCK || kind == K_PORT)
{
makeSimpleTag (Lastname, VhdlKinds, kind);
}
}
} else {
vUngetc (c);
}
}
else
{
if (kind == K_SIGNAL) {
while (c!=':') {
c = skipWhite (vGetc ());
if (c==',')
c = vGetc ();
if (isIdentifierCharacter (c))
tagNameList (kind, c);
else
break;
c = vGetc ();
}
}
else if (kind == K_PROCESS || kind == K_BLOCK) {
vStringCopyS(TagName,"unnamed");
makeSimpleTag (TagName, VhdlKinds, kind);
} else {
c = skipWhite (vGetc ());
if (c=='\"')
c = vGetc ();
if (isIdentifierCharacter (c))
tagNameList (kind, c);
}
}
}
示例12: directivePragma
static void directivePragma (int c)
{
if (cppIsident1 (c))
{
readIdentifier (c, Cpp.directive.name);
if (stringMatch (vStringValue (Cpp.directive.name), "weak"))
{
/* generate macro tag for weak name */
do
{
c = getcAndCollect ();
} while (c == SPACE);
if (cppIsident1 (c))
{
readIdentifier (c, Cpp.directive.name);
makeDefineTag (vStringValue (Cpp.directive.name), NULL, false);
}
}
}
Cpp.directive.state = DRCTV_NONE;
}
示例13: skipMacro
static int skipMacro (int c)
{
tokenInfo *token = newToken ();;
if (c == '`')
{
/* Skip keyword */
if (isIdentifierCharacter (c = vGetc ()))
{
readIdentifier (token, c);
c = vGetc ();
/* Skip next keyword if macro is `ifdef or `ifndef or `elsif*/
if (strcmp (vStringValue (token->name), "ifdef") == 0 ||
strcmp (vStringValue (token->name), "ifndef") == 0 ||
strcmp (vStringValue (token->name), "elsif") == 0)
{
verbose ("%c\n", c);
c = skipWhite (c);
readIdentifier (token, c);
c = vGetc ();
verbose ("Skipping conditional macro %s\n", vStringValue (token->name));
}
/* Skip macro functions */
else
{
c = skipWhite (c);
if (c == '(')
{
c = skipPastMatch ("()");
}
}
}
}
deleteToken (token);
return c;
}
示例14: findBlockName
static boolean findBlockName (tokenInfo *const token)
{
int c;
c = skipWhite (vGetc ());
if (c == ':')
{
c = skipWhite (vGetc ());
readIdentifier (token, c);
return (boolean) (vStringLength (token->name) > 0);
}
else
vUngetc (c);
return FALSE;
}
示例15: processFunction
static void processFunction (tokenInfo *const token)
{
int c;
tokenInfo *classType;
/* Search for function name
* Last identifier found before a '(' or a ';' is the function name */
c = skipWhite (vGetc ());
do
{
readIdentifier (token, c);
c = skipWhite (vGetc ());
/* Identify class type prefixes and create respective context*/
if (isLanguage (Lang_systemverilog) && c == ':')
{
c = vGetc ();
if (c == ':')
{
verbose ("Found function declaration with class type %s\n", vStringValue (token->name));
classType = newToken ();
vStringCopy (classType->name, token->name);
classType->kind = K_CLASS;
createContext (classType);
currentContext->classScope = TRUE;
}
else
{
vUngetc (c);
}
}
} while (c != '(' && c != ';' && c != EOF);
if ( vStringLength (token->name) > 0 )
{
verbose ("Found function: %s\n", vStringValue (token->name));
/* Create tag */
createTag (token);
/* Get port list from function */
processPortList (c);
}
}