1、设计一个识别计算器加(+)减(-)乘(*)除(/)运算的词法分析器。
2、请编写可以实现以下功能的程序,对输入的合法表达式,可以识别出表达式所包含的符号、数字、变量名。按照符号在表达式中出现次序进行输出,并用方括号括起来,后用空格隔开。
3、最终程序运行效果,用户输入表达式,实现的程序输出识别的符号。
4. 画出状态转换图 例如:
输入6+9*2
输出: [6] [+] [9] [*] [2]
输入X2+9*Arr
输出: [x2] [+] [9] [*] [arr]
输入2X+ 1*5
输出:数据错误
状态转换图 :
#include<stdio.h>
#include<ctype.h>
bool IsLetter(char* q);//判断是否是字母
int main(){
char form[50];//form是运算式
int flag=0;
gets(form);
char* p;
p=form;
while(*p!='\0'){
if(IsLetter(p)){
printf("[");
while(IsLetter(p)||isdigit(*p)){
printf("%c",*p);
p++;
}
printf("] ");
}
else if(isdigit(*p)){
printf("[");
while(isdigit(*p)){
printf("%c",*p);
p++;
}
printf("] ");
}
else if(*p == '+'){
printf("[+] ");
p++;
}
else if(*p == '-'){
printf("[+] ");
p++;
}
else if(*p == '*'){
printf("[*] ");
p++;
}
else if(*p == '/'){
printf("[/] ");
p++;
}
else if(*p == '='){
printf("[=] ");
p++;
}else{
printf("输出错误");
break;
}
}
return 0;
}
bool IsLetter(char* q){
if((*q<='Z'&&*q>='A')||(*q<='z'&&*q>='a'))
return true;
else
return false;
}