当前位置: 首页>>代码示例>>C++>>正文


C++ Scanner::nextToken方法代码示例

本文整理汇总了C++中Scanner::nextToken方法的典型用法代码示例。如果您正苦于以下问题:C++ Scanner::nextToken方法的具体用法?C++ Scanner::nextToken怎么用?C++ Scanner::nextToken使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Scanner的用法示例。


在下文中一共展示了Scanner::nextToken方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: substituteTerms

string CompiledModelGenerator::substituteTerms(const string& reactionName, const string& inputEquation, bool bFixAmounts)
{
    string equation = cleanEquation(inputEquation);
    if (equation.size() < 1)
    {
        return string("0");
    }

     Scanner s;
     stringstream ss;
     ss<<equation;

     s.AssignStream(ss);
     s.startScanner();
     s.nextToken();
     CodeBuilder sb;

    try
    {
        while (s.token() != CodeTypes::tEndOfStreamToken)
        {
            substituteToken(reactionName, bFixAmounts, s, sb);
            s.nextToken();
        }
    }
    catch (const Exception& e)
    {
       throw Exception(e.Message());
    }
    return sb.ToString();
}
开发者ID:0u812,项目名称:roadrunner-backup,代码行数:31,代码来源:rrCompiledModelGenerator.cpp

示例2: Final

//  final -> Num | "(" Expression ")" | m [ Expression ]
void Parser:: Final()
{
    switch (scanner.nextToken())
    {
        case T_OPENPAREN:       // (
        {
            scanner.eatToken(T_OPENPAREN);
            
            switch(scanner.nextToken())
            {
                case T_M:
                case T_NUMBER:
                case T_OPENPAREN:
                    Expression();
                case T_EOF:
                    break;
            }



            scanner.eatToken(T_CLOSEPAREN);
            break;
        }
        case T_M:               // m
        {
            scanner.eatToken(T_M);
            scanner.eatToken(T_OPENBRACKET);
            

            switch(scanner.nextToken())
            {
                case T_M:
                case T_NUMBER:
                case T_OPENPAREN:
                    Expression();
                case T_EOF:
                    break;
            }



            scanner.eatToken(T_CLOSEBRACKET);
            break;
        }
        case T_NUMBER:          // num
        {
            scanner.eatToken(T_NUMBER);
            num_parser = scanner.getNumberValue(); 
            break;
        }
        case T_EOF:
            break;  
        default:
        {
            parseError(scanner.lineNumber(), scanner.nextToken());
            break;
        }
    }
}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:60,代码来源:calculator.cpp

示例3: StringToInteger

RationalExpression::RationalExpression(Scanner& s) {
	this->numerator = StringToInteger(s.nextToken());
	string lookahead = s.nextToken();
	if (lookahead == "/") {
		this->denominator = StringToInteger(s.nextToken());
	} else {
		s.saveToken(lookahead);
		this->denominator = 1;
	}
	
	reduce();
}
开发者ID:meridional,项目名称:Little-Schemer,代码行数:12,代码来源:rational.cpp

示例4: Statements

//  StatementS -> Statement Term
void Parser::Statements()
{
    Statement();
    if (scanner.nextToken() == T_SEMICOLON)
        Term();

}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:8,代码来源:calculator.cpp

示例5: main

int main(int argc, char* argv[]) {
    if (argc == 2 && (strcmp(argv[1], "-s") == 0)) {
        Scanner scanner;
        while (scanner.nextToken() != T_EOF) {
            std::cout << tokenToString(scanner.nextToken()) << " ";
            scanner.eatToken(scanner.nextToken());
        }
        std::cout<<std::endl;
    } else if (argc == 2 && (strcmp(argv[1], "-e") == 0)) {
        Parser parser(true);
        parser.parse();
    } else {
        Parser parser(false);
        parser.parse();
    }
    return 0;
}
开发者ID:sarahdarwiche,项目名称:Compiler_Projects,代码行数:17,代码来源:calculator.cpp

示例6: main

int main( int /* argc */, char** /* argv */ )
{
	Scanner scanner = Scanner();
	
	SymbolTable st = SymbolTable();
	
	Token *currTok;
	currTok = scanner.nextToken();
	
	while( 1 )
	{					
		std::cout << currTok->tokenCodeToString();
		
		if( currTok->getDataType() == dt_OP )
			std::cout << "(" << currTok->opCodeToString() << ")";
		else if( currTok->getDataType() != dt_KEYWORD && currTok->getDataType() != dt_NONE )
		{
			std::cout << "(" << currTok->getDataValue().lexeme << ")";
		}	
		std::cout << " ";
		
		
		//symtab
		if( currTok->getTokenCode() == tc_ID || currTok->getTokenCode() == tc_NUMBER )
		{
			SymbolTableEntry *entry = st.lookup( currTok->getDataValue().lexeme );
			
			if(!entry)
			{
				entry = st.insert( currTok->getDataValue().lexeme );
				currTok->setSymTabEntry( entry );
			}
			currTok->setSymTabEntry( entry );	
		}
		
		
		if(currTok->getTokenCode() == tc_EOF)
			break;
		currTok = scanner.nextToken();
	}
	
	std::cout << "\n\n";
	st.print();
	return 0;
}
开发者ID:ragnarls08,项目名称:Compilers1,代码行数:45,代码来源:main.cpp

示例7: parse

void Parser::parse() {
    // This is the entry point for the parser, which simply starts parsing
    // the grammar by calling the function for the start symbol.
    //set lookahead to nextToken()
    lookahead = scanner.nextToken();
    //call the start symbol
    Start();
    match(T_EOF);
}
开发者ID:sarahdarwiche,项目名称:Compiler_Projects,代码行数:9,代码来源:calculator.cpp

示例8: match

void Parser::match(token current_token) {
    if(current_token == lookahead) {
      scanner.eatToken(current_token);
      lookahead = scanner.nextToken();
     }
     else {
       mismatchError(scanner.lineNumber(),current_token , lookahead);
       
     }       
}
开发者ID:sarahdarwiche,项目名称:Compiler_Projects,代码行数:10,代码来源:calculator.cpp

示例9: Power_Tail

//  power_Tail -> "**" final power_Tail | Epsilon
void Parser::Power_Tail()
{
    switch (scanner.nextToken()) {
        case T_POWER:           // **
        {
            scanner.eatToken(T_POWER);
            Final();
            if (scanner.nextToken() == T_POWER)
                Power_Tail();
            break;
        }
        case T_EOF:
            break;  
        default:
        {
            parseError(scanner.lineNumber(), scanner.nextToken());
            break;
        }
    }
}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:21,代码来源:calculator.cpp

示例10: countTokens

/**
 * logics: import, declare, init a token string, ...
 * patt: iterator for items
 */
void countTokens()
{
	Scanner scanner; // uppercamelcase for Class

	cout << "Enter a sentence as a token string: ";
	scanner.setInput(getLine()); // scanner.setInput(string str)

	while(scanner.hasMoreToken()) { // bool scanner.hasMoretoken()
		cout << scanner.nextToken() << " "; // string scanner.nextToken()
	}
	cout << endl;
}
开发者ID:21hook,项目名称:cs106b,代码行数:16,代码来源:scanner.cpp

示例11: Factor_Tail

//  Factor_Tail-> "*" power Factor_Tail |  "/"" power Factor_Tail | Epsolon
void Parser::Factor_Tail()
{
    switch (scanner.nextToken()) {
        case T_MULTIPLY:        // *
        {
            scanner.eatToken(T_MULTIPLY);
            Power();
            if (scanner.nextToken() == T_MULTIPLY || scanner.nextToken() == T_DIVIDE)
                Factor_Tail();
            break;
        }
        case T_DIVIDE:          // /
        {
            scanner.eatToken(T_DIVIDE);
            Power();
            if (scanner.nextToken() == T_MULTIPLY || scanner.nextToken() == T_DIVIDE)
                Factor_Tail();
            break;
        }
        case T_EOF:
            break;  
        default:
        {
            parseError(scanner.lineNumber(), scanner.nextToken());
            break;
        }
    }

}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:30,代码来源:calculator.cpp

示例12: Exp_Tail

//Exp_Tail -> "+" Factor Exp_Tail | "-" Factor Exp_Tail | EPSOLON
void Parser::Exp_Tail()
{
    switch (scanner.nextToken())
    {
        case T_PLUS:            // +
        {
            scanner.eatToken(T_PLUS);
            Factor();
            if (scanner.nextToken() == T_PLUS || scanner.nextToken() == T_MINUS)
                Exp_Tail();
            break;
        }
        case T_MINUS:           // -
        {
            scanner.eatToken(T_MINUS);
            Factor();
            if (scanner.nextToken() == T_PLUS || scanner.nextToken() == T_MINUS)
                Exp_Tail();
            break;
        }
        case T_EOF:
            break;  
        default:
        {
            parseError(scanner.lineNumber(), scanner.nextToken());
            break;
        }
    }

}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:31,代码来源:calculator.cpp

示例13: Term

//  Term -> ; Statement Term | Epsolon
void Parser::Term()
{
    //cout<< tokenToString(scanner.nextToken()) <<endl;
    switch (scanner.nextToken()) {
        case T_SEMICOLON:       //;
        {
            scanner.eatToken(T_SEMICOLON);
            Statement();
            if (scanner.nextToken() == T_SEMICOLON)
                Term();
            //Term();
            break;
        }
        case T_EOF:
            break;
        default:
        {
            parseError(scanner.lineNumber(), scanner.nextToken());
            break;
        }
    }
}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:23,代码来源:calculator.cpp

示例14: Factor

//  Factor -> power Factor_Tail
void Parser:: Factor()
{
    Power();
    switch (scanner.nextToken()) {
        case T_MULTIPLY:        // *
        {
            Factor_Tail();
            break;
        }
        case T_DIVIDE:          // /
        {
            Factor_Tail();
            break;
        }
    }
}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:17,代码来源:calculator.cpp

示例15: Expression

// Expression -> Factor Exp_Tail
void Parser::Expression()
{

    Factor();
    switch (scanner.nextToken())
    {
        case T_PLUS:            // +
        {
            Exp_Tail();
            break;
        }
        case T_MINUS:           // -
        {
            Exp_Tail();
            break;
        }     
    }
}
开发者ID:freddyyang,项目名称:scanner_parser_calc,代码行数:19,代码来源:calculator.cpp


注:本文中的Scanner::nextToken方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。