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


C++ TokenScanner::getTokenType方法代码示例

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


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

示例1: processLine

void processLine(string line, Program & program, EvalState & state) {
	TokenScanner scanner;
	scanner.ignoreWhitespace();
	scanner.scanNumbers();
	scanner.setInput(line);
    string str=scanner.nextToken();
    if (scanner.getTokenType(str)==NUMBER) {
		
        int lineNumber=stringToInteger(str);
        string token=scanner.nextToken();
        scanner.saveToken(token);
        if (token!="") {
            program.addSourceLine(lineNumber, line);
            program.setParsedStatement(lineNumber, parseStatement(scanner));
        }
        else {
            program.removeSourceLine(lineNumber);
        }
		
		
    }
	
    else if (str=="LIST") {
        for (int i=program.getFirstLineNumber(); i!=-1; i=program.getNextLineNumber(i)) {
            cout << program.getSourceLine(i)<<endl;
        }
    }
    else if (str=="CLEAR") {
        program.clear();
    }
    else if(str=="QUIT") exit(0);
    else if (str=="HELP") cout<<"This is a minimal BASIC interpreter."<<endl;
	
    else if (str=="RUN") {
        int currentLine=program.getFirstLineNumber();
        state.setCurrentLine(currentLine);
        while (currentLine!=-1) {                       
            program.getParsedStatement(currentLine)->execute(state);
			
            if(currentLine!=state.getCurrentLine()) {
                currentLine=state.getCurrentLine();
            }
            else {
                currentLine=program.getNextLineNumber(currentLine);
                state.setCurrentLine(currentLine);
            }
        }
    }
	
	
}
开发者ID:sjmjulia,项目名称:basic,代码行数:51,代码来源:Basic.cpp

示例2: processLine

/*
 * Function: processLine
 * Usage: processLine(line, program, state);
 * -----------------------------------------
 * Processes a single line entered by the user.  In this version,
 * the implementation does exactly what the interpreter program
 * does in Chapter 19: read a line, parse it as an expression,
 * and then print the result.  In your implementation, you will
 * need to replace this method with one that can respond correctly
 * when the user enters a program line (which begins with a number)
 * or one of the BASIC commands, such as LIST or RUN.
 */
void processLine(string line, Program & program, EvalState & state) {
   TokenScanner scanner;
   scanner.ignoreWhitespace();
   scanner.scanNumbers();
   scanner.setInput(line);
   string token=scanner.nextToken();
   TokenType type=scanner.getTokenType(token);
   int lineNumb;
   int priorLineNumb;
   if(type==NUMBER){
     if(scanner.hasMoreTokens()){
       program.addSourceLine(stringToInteger(token),line);
       Statement *stmt=parseStatement(scanner); 
       program.setParsedStatement(stringToInteger(token),stmt);  //link statement to line number
     }
     else
       program.removeSourceLine(stringToInteger(token));
   }
   if(type==WORD){
     if(token=="LIST"){
       lineNumb=program.getFirstLineNumber();
       while(lineNumb!=-1){
	 cout<<program.getSourceLine(lineNumb)<<endl;
	 lineNumb=program.getNextLineNumber(lineNumb);
       }
     }
     else if(token=="RUN"){
       state.setCurrentLine(program.getFirstLineNumber());
       lineNumb=state.getCurrentLine();
       while(lineNumb!=-1){	 
	 if(program.hasLineNumber(lineNumb)==false)
	   error("Invalid line reference at program line "+integerToString(priorLineNumb));
	 Statement *stmt=program.getParsedStatement(lineNumb);
	 state.setCurrentLine(program.getNextLineNumber(lineNumb));
	 stmt->execute(state);
	 priorLineNumb=lineNumb;
	 lineNumb=state.getCurrentLine();
       }
     }
     else if(token=="CLEAR"){
       program.clear();
     }
     else if(token=="HELP"){
       cout<<"Minimal Basic Statements"<<endl; 
       cout<<"REM   This statement used for comments"<<endl;
       cout<<"LET   This statement is BASIC's assigment statement"<<endl;
       cout<<"PRINT In minimal BASIC, the PRINT statement has the form: "<<endl;
       cout<<"         PRINT exp"<<endl;
       cout<<"      where exp is an expression."<<endl;
       cout<<"INPUT In the minimal version of the BASIC interpreter, the INPUT statement has the form:"<<endl;
       cout<<"         INPUT var"<<endl;
       cout<<"      where var is a variable read in from the user"<<endl;
       cout<<"GOTO  This statement has the syntax"<<endl;
       cout<<"         GOTO n"<<endl;
       cout<<"      which forces the program to continue from line n instead of continuing with the next statement"<<endl;
       cout<<"IF    This statement provides conditional control. The syntax for this statement is: "<<endl;
       cout<<"      IF exp1 op exp2 THEN n"<<endl;
       cout<<"      where exp1 and exp2 are expressions and op is one of the conditional operators =, <, or >."<<endl;
       cout<<"END   This statment marks the end of the program."<<endl;
       cout<<"Commands to control the BASIC interpreter"<<endl;
       cout<<"RUN   This command starts program execution beginning at the lowest-numbered line. "<<endl;
       cout<<"LIST  This command lists the steps in the program in numerical sequence."<<endl;
       cout<<"CLEAR This command deletes the program so the user can start entering a new one."<<endl;
       cout<<"HELP  This command provides a simple help message describing the interpreter."<<endl;
       cout<<"QUIT  Typing QUIT exits from the BASIC interpreter by calling exit(0)."<<endl;	 
     }
     else if(token=="QUIT"){
       exit(0);
     }
     else
       cout<<"Invalid command"<<endl;     
   }
}
开发者ID:jwhurt,项目名称:Projects,代码行数:85,代码来源:Basic.cpp

示例3: processLine

void processLine(string line, Program & program, EvalState & state) {
  /* TokenScanner scanner;
   scanner.ignoreWhitespace();
   scanner.scanNumbers();
   scanner.setInput(line);
   Expression *exp = parseExp(scanner);
   int value = exp->eval(state);
   cout << value << endl;
   delete exp;*/

   TokenScanner scanner;
   scanner.ignoreWhitespace();
   scanner.scanNumbers();
   scanner.setInput(line);
   string token = scanner.nextToken();
   TokenType type = scanner.getTokenType(token);
   if (type == WORD){
	   if (token == "RUN")
	   {
		   int current_line=program.getFirstLineNumber();
		   while (current_line>=0)
		   {
			   int next_line = program.getNextLineNumber(current_line);
			   Statement* stat=program.getParsedStatement(current_line);
			   StatementType type = stat->get_type();
			   if (type == END)
				   break;
			   if (type == GOTO)
			   {
				   ((Gotostmt*)stat)->execute(state,current_line);
				   
				   continue;
			   }
			   if (type == IF)
			   {
				   ((Ifstmt*)stat)->execute(state, current_line);
				   if (current_line != -2)
			  	       continue;
			   }
			  
			   stat->execute(state);
			   current_line = next_line;
		   }
		  
	   }
	   if (token == "QUIT")
	   {
		   exit(0);
	   }
	   if (token == "CLEAR")
	   {
		   program.clear();
		   EvalState state1;
		   state = state1;
		   
	   }
	   if (token == "HELP")
	   {
	   }
	   if (token == "LIST")
	   {
		   int current_line = program.getFirstLineNumber();
		   while (current_line != -1)
		   {
			   cout << program.getSourceLine(current_line) << endl;
			   current_line = program.getNextLineNumber(current_line);
		   }
	   }
	   if (token == "INPUT"){
		   string st = scanner.nextToken();
		   if (scanner.hasMoreTokens())
			   error("SYNTAX ERROR");
		   Inputstmt inputst(st);
		   inputst.execute(state);
		  
	   }
	   if (token == "PRINT"){
		   Printstmt printst(scanner);
		   printst.execute(state);
	   }

	   if (token == "LET")
	   {
		   Letstmt lets(scanner);
		   lets.execute(state);
		 
	   }
	   if (token != "RUN"&&token != "CLEAR"&&token != "HELP"&&token != "LIST"&&token != "QUIT"&&token != "PRINT"&&token != "LET"&&token != "INPUT")
		   error("SYNTAX ERROR");
   }


   else if (type == NUMBER){
	   int line_num = atoi(token.c_str());
	   
	   string token2 = scanner.nextToken();
	   if (token2 == "")
	   {
		   program.removeSourceLine(line_num);
		   return;
//.........这里部分代码省略.........
开发者ID:sherlockkenan,项目名称:sjtu_project,代码行数:101,代码来源:Basic.cpp


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