编译原理实验2-使用状态图构建词法分析

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值