求大神,很急,怎样完善get_token等以实现运行示例中的功能
该c++程序将从标准输入读取,并将相应的令牌写入标准输出,每行一个。
程序不打开文件。 它通过cin从标准输入中读取。 不使用或ifstream。
输入格式
输入将是任意行,包含令牌。 这是有效的令牌:
1: +=, 2: -=, 3: *=, 4: /=, 5: =, 6: !=, 7: <, 8: >, 9: <=, 10: >=, 11: if, 12: fi, 13: print, 14: return
15: 变量:26个单字母a到z
16: 整数:非空数字序列(0…9)
使用词法分析的最大munch方法:给定两个标记(<和<=,或p和print)之间的选择,请始终选择较长的标记。
忽略标记之前,之后和之间(但不是内部)的空格(由isspace()确定)。
但是,令牌并不总是由空格分隔。 a += b是三个单独的标记。 printa是两个标记,print和a。
忽略注释,该注释定义为#,后跟其余的行。 注释确实是令牌之间的中断。
输入中的大小写无关紧要, 所有输出必须为小写。
如果输入为iFg> R,则如果g,>,r,则输出必须为四个标记。
如果遇到无效的输入(例如&&),请生成一条包含无效输入的错误消息,然后停止程序。
运行示例:
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
string progarm_name;
bool get_token(string &input, string &sym){
}
void analyze(istream &in){
for(string line; getline(in, line);)
analyze(line);
}
}
void analyze(string input){
for(string token; get_token(input, token):){
cout << token << '\n';
}
}
int main(int, char *argv[]){
program_name = argv[0];
analyze(cin);
return 0;
}
}