实验一 无符号数的词法分析程序 一 实验目的 1 培养学生初步掌握编译原理实验的技能 2 验证所学的理论,巩固所学的知识并加深理解。 3 对学生进行实验研究的基本训练 二 实验内容及要求 1 内容:掌握词法分析 的基本思想,并用高级语言编写无符号数的此法分析程序。 2 要求:从键盘输入一串字符(包括字母,数字等),最后以“:”结束,编写程序识别出其中的无符号数。 3 无符号数的文法规则可定义如下: <无符号数>------<无符号实数>|<无符号整数> <无符号实数>------<无符号整数>.<数字串>[E<比例因子>]|<无符号整数>E<比例因子> <比例因子>------<有符号整数> <有符号整数>------[+|-]<无符号整数> <无符号整数>------<数字串> <数字串>------<数字>{<数字>} <数字>-----0,1,2,….9 4无符号程序的流程如下:
2022-05-24 17:29:41 165KB 实验一 无符号数的词法分析程序
1
用C++实现的无符号数的词法分析程序
2020-03-23 03:01:45 2KB C++ 无符号数
1
从键盘上输入一串字符(包括字母、数字等),最后以“;”结束,编写程序识别出其中的无符号数
2020-01-08 03:11:13 3KB 编译原理
1
#include #include #include #include using namespace std; int w=0; //尾数累加器 int p=0; //指数累加器 int j=0; //十进制小数位数计数器 int e=1; //用来记录十进制数的符号,当指数为正时为1,为负时为-1 int i=0; //用来标志元素位置 int d=0; //用来表示每个数值型元素对应的数值 const int N=40;//用来确定输入识别符的最大长度 char data[N];//存放输入的识别符 bool is_digit; //标志是否是数字 string CJ1;//确定是整形还是实型 double CJ2;//记数值 //函数声明 void check(char c);//检查首字母是否是数字的函数 void deal_integer(char c);//处理识别符的整数部分 void deal_point(char c);//用来处理小数部分 void deal_index(char c);//用来处理指数部分 void s_next();// 确定实型 void z_next();//确定整型 void last();// 计算 CJ2 void error();//程序中错误处理程序 void deal();//处理函数主体 int main(){ //主函数 cout<<"please input your data,and its maximum length is "<data; deal();//处理函数主体 last();// 计算 CJ2 system("pause"); return 0; } void check(char c) //判断输入的首字母是否是数字 { is_digit=isdigit(c); while(is_digit!=true){//输入的首字母不是数字时 cout<<"\nError! Try again.."<>data; check(data[0]); } } void deal_integer(char c){//处理识别符的整数部分 d=(int)c-48; w=w*10+d; i++; if(isdigit(data[i])!=0)//下一个仍是数值时,调用程序本身 deal_integer(data[i]); } void deal_point(char c){//用来处理小数部分 int temp=i; if(isdigit(c)!=0)//是数值字符时 deal_integer(c); else { error(); //错误处理程序 deal();//处理函数主体 } j=i-temp;//记录十进制小数位数 } void deal_index(char c){//用来处理指数部分 if(c=='-') {e=-1;i++;}//是'-'号时 else {if(c=='+') i++;//是'+' 号时 else { if(isdigit(c)==false) //非数值字符时 { error();//错误处理程序 deal();//处理函数主体 } else
2019-12-21 22:02:13 33KB 无符号数的词法分析程序
1