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


C++ TokenScanner类代码示例

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


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

示例1: sqrtFunction

/* Function: sqrtFunction()
 * Usage: is called by formulaStringScanning() function if it detect sqrt token in formula
 * -----------------------------------------------------------------------------------------//
 * Library sqrt function execution. Expects for brackets and involves
 * formulaStringScanning process for expression in brackets. Return sqrt function result
 * for obtained value in brackets.
 *
 * @param scanner   TokenScanner for user formula
 * @param xValue    Value for x variable in user equation */
double sqrtFunction(TokenScanner& scanner, double xValue) {
    bool sqrtFail = false;
    string token = "";
    double num1 = 0;
    if(scanner.hasMoreTokens()) {
        token = scanner.nextToken();
        if(token == "(") { //waiting for brackets at this place
            bool bracketsOpened = true;
            /* Calls internal formulaStringScanning process for expression in brackets */
            num1 = formulaStringScanning(scanner,
                                         bracketsOpened,
                                         xValue);
        } else {
            sqrtFail = true;
        }
    }

    if(sqrtFail) {
        cout << "   - SQRT FUNCTION FAULT" << endl;
        failFlag = true;
        return 0;
    }

    /* Returns sqrt function result */
    return sqrt(num1);
}
开发者ID:ekuryatenko,项目名称:cs-b-assignment3_Calculator,代码行数:35,代码来源:Calculator.cpp

示例2: sqrtFunction

/* Function: sqrtFunction()
 * -------------------------
 * Library sqrt function execution. Expects for brackets and involves
 * formulaStringScanning process for expression in brackets. Return sqrt function result
 * for obtained value in brackets.
 *
 * @param scanner   TokenScanner for user formula */
double sqrtFunction(TokenScanner& scanner) {
    bool sqrtFailFlag = false;
    string token = "";
    double sqrtParam = 0;

    if (scanner.hasMoreTokens()) {
        token = scanner.nextToken();//waiting for brackets at this place
        if (token == "(") {
            bool bracketsOpened = true;
            /* Calls internal scanFormulaString process for expression in brackets */
            sqrtParam = scanFormulaString(scanner, bracketsOpened);
        } else {
            sqrtFailFlag = true;
        }
    }

    if (sqrtFailFlag) {
        cout << "   - SQRT FUNCTION FAULT" << endl;
        FAIL_FLAG = true;
        return 0;
    }

    /* Returns sqrt function result */
    return sqrt(sqrtParam);
}
开发者ID:shpp-ekuryatenko,项目名称:cs-b-assignment1_Calculator,代码行数:32,代码来源:Calculator.cpp

示例3: processText

/**
 * Receive information from file, processes and displays the result on the screen.
 */
void processText(TokenScanner & scanner){
    int counterSentences = 0;
    int counterWords = 0;
    int counterSyllable = 0;
    double grade = 0.0;

    scanner.ignoreWhitespace(); // ignores spaces
    scanner.addWordCharacters("'"); // does part of the token is the character "'"

    // processes each token
    while (scanner.hasMoreTokens()){
        string token = scanner.nextToken();
        counterSentences += checkSentences(token);
        if(checkWords(token)){
            counterWords ++;
            counterSyllable += colSyllable(token);
        }
    }
    // If the file does not contain any words or sentences, assume that their one
    if(counterWords == 0 || counterSentences == 0) counterSentences = counterWords = 1;

    grade = getGrade(counterSentences, counterWords, counterSyllable);

    cout << "Words : " << counterWords << endl;
    cout << "Syllable : " << counterSyllable << endl;
    cout << "Sentences : " << counterSentences << endl;
    cout << "Grade : " << grade << endl;
}
开发者ID:vlad-alekseev,项目名称:other,代码行数:31,代码来源:FleschKincaid.cpp

示例4: isHaiku

bool isHaiku(string filename) {
    fstream infile;
    infile.open(filename.c_str());
    string temp;
    int count = 0;
    TokenScanner scanner;
    while(getline(infile, temp)){
        count++;
        int syllables = 0;
        scanner.setInput(temp);
        while (scanner.hasMoreTokens()){
            syllables += syllablesIn(scanner.nextToken());
        }
        if((count == 1 || count ==3)&&syllables!=5){
            infile.close();
            return false;
        }
        if (count == 2 && syllables !=7){
            infile.close();
            return false;
        }
        if (count >3){
            infile.close();
            return false;
        }
            
    }
    return true;
}
开发者ID:sungjuc,项目名称:Study,代码行数:29,代码来源:main.cpp

示例5: readE

LetStmt::LetStmt(TokenScanner &scanner) {
    identifier = scanner.nextToken();
    op = scanner.nextToken();
    exp = readE(scanner, 0);
    if (scanner.hasMoreTokens()) {
        error("Extraneous token " + scanner.nextToken());
    }
}
开发者ID:mariolew,项目名称:CS106B,代码行数:8,代码来源:statement.cpp

示例6: error

/*
 * Implementation notes: the InputStmt subclass
 * ----------------------------------------------
 * Instances of this class read the identifier from the scanner and notify
 * the user if its format is illegal. In the execute method, it records
 * the input of the user as the value of the identifier in "state".
 */
InputStmt::InputStmt(TokenScanner & scanner){
    string nextToken = scanner.nextToken();
    if (isdigit(nextToken[0]))
        error("Invalid identifier for Input Statement -- can't start with an integer.");
    if (scanner.hasMoreTokens())
        error("Unexpected token: " + scanner.nextToken());
    identifier = nextToken;
}
开发者ID:abielg,项目名称:BASIC-interpreter,代码行数:15,代码来源:statement.cpp

示例7: scanCPlusPlusTokens

/* Function: scanCPlusPlusTokens()
 * Sets scanner features. */
void scanCPlusPlusTokens(TokenScanner & scanner) {
    scanner.ignoreWhitespace();
    /* Return numbers */
    scanner.scanNumbers();
    scanner.addOperator("%");
    scanner.addOperator("/");
    scanner.addOperator("*");
    scanner.addOperator("(");
    scanner.addOperator(")");
}
开发者ID:ekuryatenko,项目名称:cs-b-assignment3_Calculator,代码行数:12,代码来源:Calculator.cpp

示例8: listProgram

/*
 * Function: listProgram
 * Usage: listProgram(program, scanner);
 * -------------------------------------------
 * Displays the lines of the program.  It calls either version of program.toString()
 * depending on whether the user specifies line numbers.
 */
void listProgram(Program & program, TokenScanner & scanner) {
    if (!scanner.hasMoreTokens()) {
        program.toString();
    }
    else {
        int startLine = stringToInteger(scanner.nextToken());
        scanner.nextToken();
        int endLine = stringToInteger(scanner.nextToken());
        program.toString(startLine, endLine);
    }
}
开发者ID:Thunder1989,项目名称:CS106B,代码行数:18,代码来源:Basic.cpp

示例9: isFormula

static bool isFormula(string& mainFormula, string& formula, string& cellname1, string& cellname2, TokenScanner& scanner, SSModel& cellsheet) {
    if (cellsheet.isFormula(formula)) {
        cellname1 = toUpperCase(scanner.nextToken());
        mainFormula += cellname1 + scanner.nextToken();
        cellname2 = toUpperCase(scanner.nextToken());
        if (checkRange(cellname1,cellname2, cellsheet)) {
            string bracket = scanner.nextToken();
            if (bracket == ")") {
                mainFormula += cellname2 + bracket;
                return true;
            }
        }
    }
    return false;
}
开发者ID:suffianhamzah,项目名称:CS106X-C-,代码行数:15,代码来源:parser.cpp

示例10: 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

示例11: powFunction

/* Function: powFunction()
 * Usage: is called by formulaStringScanning() function if it detect pow token in formula
 * -----------------------------------------------------------------------------------------//
 * Library pow function execution. Believe that it's normalized function -
 * without any variables like "x" or "y" - just pow(<value>, <power for value>):
 * pow(2, 4) = 16
 * Expects brackets, and return pow function result for values in brackets.
 *
 * @param scanner      TokenScanner for user formula */
double powFunction(TokenScanner& scanner) {
    bool powFail = false;
    string token = "";
    string num1 = "";
    string num2 = "";
    while(scanner.hasMoreTokens()) {
        token = scanner.nextToken();//waiting for brackets at this place
        if(token == "(") {
            num1 = scanner.nextToken();//pow function param1
            token = scanner.nextToken();//waiting coma at this place
            if(token == ",") {
                num2 = scanner.nextToken();//pow function param2
                token = scanner.nextToken();//waiting for brackets at this place
                if(token == ")") {
                    break;
                } else {
                    powFail = true;
                }
            } else {
                powFail = true;
            }
        } else {
            powFail = true;
        }

        if(powFail) {
            cout <<  "   - POW FUNCTION INPUT FAULT!" << endl;
            failFlag = true;
            return 0;
        }
    }
    /* Returns pow function result */
    return pow(stringToDouble(num1), stringToDouble(num2));
}
开发者ID:ekuryatenko,项目名称:cs-b-assignment3_Calculator,代码行数:43,代码来源:Calculator.cpp

示例12: 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;
   if (!scanner.hasMoreTokens()) {
       return;
   }
   string firstToken = toUpperCase(scanner.nextToken());
   if (firstToken == "RUN") {
       runProgram(program, state);
   }
   else if (firstToken == "QUIT") {
       exit(0);
   }
   else if (firstToken == "HELP") {
       dspHelp();
   }
   else if (firstToken == "CLEAR") {
       program.clear();
   }
   else if (firstToken == "LIST") {
       listCmd(program);
   }
   else if (firstToken == "INPUT" || firstToken == "PRINT" || firstToken == "LET") {
       scanner.saveToken(firstToken);
       Statement * stmt = parseStatement(scanner);
       stmt->execute(state);
       delete stmt;
   }
   else {
       int lineNumber = stringToInteger(firstToken);
       if (!scanner.hasMoreTokens()) {
           program.removeSourceLine(lineNumber);
       }
       else {
           int length = firstToken.length();
           string source = line.substr(length);
           program.addSourceLine(lineNumber, source);
           Statement * stmt = parseStatement(scanner);
           program.setParsedStatement(lineNumber, stmt);
       }
   }
}
开发者ID:mariolew,项目名称:CS106B,代码行数:48,代码来源:Basic.cpp

示例13: while

/*
 * Implementation notes: the IfStmt subclass
 * ----------------------------------------------
 * Instances of this class check if the expression that follows "IF" is true.
 * If it is, the program goes to the line indicated; if not, the program continues
 * to the next line.
 */
IfStmt::IfStmt(TokenScanner & scanner, Program & program){
    string lhs = "";
    string nextToken = scanner.nextToken();
    while (nextToken != "=" && nextToken != ">" && nextToken != "<" && nextToken != "") {
        lhs += nextToken;
        nextToken = scanner.nextToken();
    }

    if (!(nextToken == "=" || nextToken == ">" || nextToken == "<"))
        error("Illegal operator for IF command");
    op = nextToken;

    nextToken = scanner.nextToken();
    string rhs = "";

    while (nextToken != "THEN" && nextToken != "then" && nextToken != "") {
        rhs += nextToken;
        nextToken = scanner.nextToken();
    }
    if (nextToken != "THEN" && nextToken != "then")
        error("Incorrect argument for IF command.");

    //scanner for the lhs expression
    TokenScanner scanner2;
    scanner2.ignoreWhitespace();
    scanner2.scanNumbers();
    scanner2.setInput(lhs);
    lhsExp = parseExp(scanner2);

    //scanner for the rhs expression
    TokenScanner scanner3;
    scanner3.ignoreWhitespace();
    scanner3.scanNumbers();
    scanner3.setInput(rhs);
    rhsExp = parseExp(scanner3);

    lineNumber = stringToInteger(scanner.nextToken()); //CHECK FOR ERRORS HERE
}
开发者ID:abielg,项目名称:BASIC-interpreter,代码行数:45,代码来源:statement.cpp

示例14: toAlpha

void toAlpha(std::string word, Map<std::string, std::string>& symbolTable) {
	TokenScanner scanner;
	scanner.ignoreWhitespace();

	for(char i = 'A'; i < 'Z'; i++)
		scanner.addWordCharacters(symbolTable.get(charToString(i)));

	scanner.setInput(word);

	while(scanner.hasMoreTokens()) {
		std::string symbol = scanner.nextToken();
		cout << symbolTable.get(symbol);
	}
	cout << endl;
}
开发者ID:mahmoudmheisen91,项目名称:Programing_Abstractions,代码行数:15,代码来源:chapterFourProblems.cpp

示例15: interpreter

void interpreter(void) {
	std::string line;
	TokenScanner scanner;
	scanner.ignoreWhitespace();
	scanner.scanNumbers();
	Map<std::string, std::string> symbolTable;

	cout << "Interpreter is running: " << endl;

	// Main loop:
	std::string key, value;
	while(true) {
		cout << "> ";
		line = getLine();

		if(line == "quit")
			break;

		else if(line == "list") {
			for(std::string key : symbolTable) {
				cout << key << " = " << symbolTable.get(key) << endl;
			}
		}

		else if(symbolTable.containsKey(line))
			cout << symbolTable.get(line) << endl;

		// Parse statements:
		else {
			scanner.setInput(line);
			bool isValue = false;
			while(scanner.hasMoreTokens()) {
				std::string token = scanner.nextToken();
				if(isValue)
					value = token;
				else if(token == "=")
					isValue = true;
				else
					key = token;
			}
			symbolTable.add(key, value);
		}
	}

	cout << "Interpreter is stopped." << endl;
}
开发者ID:mahmoudmheisen91,项目名称:Programing_Abstractions,代码行数:46,代码来源:chapterFourProblems.cpp


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