资源简介
编译原理课程设计
for循环
用LR法实现
中间代码用三元式表示

代码片段和文件信息
#include“init.h“
int main(){
input();//输入
scanner();//扫描输入串进行词法分析,词法分析存于tokenList中,有单词和类型码
grammar();//语法分析和语义分析,二者穿插进行
outfile1.close();//关闭打开的文件
outfile2.close();//关闭打开的文件
outfile3.close();//关闭打开的文件
return 0;
}
void input(){//输入函数,以#控制
char c;
cout<<“******************BEGIN*******************“< cout<<“* for循环语句的分析 *“< cout<<“* *“< cout<<“*包括的内容如下: *“< cout<<“*1.词法分析 *“< cout<<“*2.语法分析 *“< cout<<“*3.语义分析 *“< cout<<“* *“< cout<<“*****************END**********************“< cout< cout<<“请输入for循环语句并以#结束:“< do{
c=cin.get();
s+=c;
}while(c!=‘#‘);//不以#结尾则重新输入
}
void scanner(){
int t;
while(num switch(sort(s[num])){
case 0:
error();
num++;
break;
case 1:
t=recog_id(s[num]);
if(t==-1)error();
break;
case 2:t=recog_dig(s[num]);
if(t==-1)error();
break;
case 3:t=recog_delimeter(s[num]);
if(t==-1)error();
break;
case 4:t=recog_oper(s[num]);
if(t==-1)error();
break;
case 5:
num++;
break;
}
}
write_token();
}
int sort(char ch){//排序函数
if(isalpha(ch) || ch==‘_‘)return 1;//标识符以字母或下划线开始
else if(isdigit(ch))return 2;//数字
else if(isin(chdelimeter12))return 3;//若是‘,则是字符常数
else if(isin(choper10))return 4;//若是其他符号
else if(ch==‘ ‘ || ch==9)return 5;//9表示水平制表符
else return 0;
}
int recog_id(char ch){//ch为给定字符串的第一个字符
char state=‘0‘;//出示状态为0
while(state!=‘2‘){
switch(state){
case ‘0‘://若当前是状态0,读入一个字母或下划线,转向状态1
if(isalpha(ch) || ch==‘_‘){
state=‘1‘;
tokenList[count].word.push_back(ch);
tokenList[count].token=0;
}
else return -1;
break;
case ‘1‘://若当前是状态1,读入字母或数字或下划线,仍为状态1
if(isalpha(ch) || isdigit(ch) || ch==‘_‘){
state=‘1‘;
tokenList[count].word.push_back(ch);
}
else{
state=‘2‘;
tokenList[count].token=2;
num--;//退回当前读入的字符
}
}
ch=s[++num];
}
string str;//截取字符串,并判断是否是关键字
for(int i=0;i str+=tokenList[count].word[i];
}
if(isin(strkeyword33))tokenList[count].token=1;
count++;
return 0;
}
int recog_dig(char ch){//识别常数
char state=‘0‘;//初始状态为0
while(state!=‘7‘){
switch(state){
case ‘0‘:
if(isdigit(ch)){
state=‘1‘;
tokenList[count].word.push_back(ch);
tokenList[count].token=0;
}
else return -1;
break;//读入一个数字
case ‘1‘:
if(isdigit(ch)){
state=‘1‘;
tokenList[count].word.push_back(ch);
}//仍然读入数字
else if(ch==‘.‘){
state=‘2‘;
tokenList[count].word.push_back(ch);
}//读入小数点,识别实数
else if(ch==‘e‘ || ch==‘E‘){
state=‘4‘;
tokenList[count].word.push_back(ch);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 630821 2009-06-18 19:40 编译原理课程设计for循环\Debug\for.exe
文件 853372 2009-06-18 19:40 编译原理课程设计for循环\Debug\for.ilk
文件 2568072 2009-06-18 18:53 编译原理课程设计for循环\Debug\for.pch
文件 1188864 2009-06-18 19:08 编译原理课程设计for循环\Debug\for.pdb
文件 434801 2009-06-18 19:40 编译原理课程设计for循环\Debug\main.obj
文件 82944 2009-06-18 19:41 编译原理课程设计for循环\Debug\vc60.idb
文件 135168 2009-06-18 19:08 编译原理课程设计for循环\Debug\vc60.pdb
文件 4308 2009-06-18 19:39 编译原理课程设计for循环\for.dsp
文件 529 2009-06-18 18:52 编译原理课程设计for循环\for.dsw
文件 41984 2009-06-18 19:42 编译原理课程设计for循环\for.ncb
文件 53760 2009-06-18 19:42 编译原理课程设计for循环\for.opt
文件 871 2009-06-18 19:40 编译原理课程设计for循环\for.plg
文件 4733 2009-06-18 18:53 编译原理课程设计for循环\init.h
文件 20628 2009-06-21 19:44 编译原理课程设计for循环\main.cpp
文件 219 2009-06-18 01:03 编译原理课程设计for循环\产生式.txt
文件 350 2009-06-18 19:40 编译原理课程设计for循环\词法分析结果.txt
文件 186 2009-06-18 19:40 编译原理课程设计for循环\语义分析结果.txt
文件 1694 2009-06-18 19:40 编译原理课程设计for循环\赋值语句分析过程.txt
文件 524 2009-06-18 19:40 编译原理课程设计for循环\过程分析.txt
目录 0 2009-06-19 12:11 编译原理课程设计for循环\Debug
目录 0 2009-06-22 02:04 编译原理课程设计for循环
----------- --------- ---------- ----- ----
6023828 21
- 上一篇:udp丢包率统计
- 下一篇:ls -R 递归显示
相关资源
- 电信中兴光猫超密获取工具使用方法
- 升腾Win终端系统升级方法新版.doc
- railroad铁路CAD生成
- DSP28335程序片内FLASH搬运至RAM运行的
- 光立方制作(原理图 源程序 LED搭接方
- HP笔记本BIOS丢失解决方法,DMI TOOLK
- 操作系统 LRU算法 实验报告 及 程序代
- UART转CAN或LIN的工具(Uart2any)和文档
- 马尔科夫 蒙特卡罗方法.rar 中文版
- linux下用多进程同步方法解决生产者
- 基于AT89C51的数据采集系统设计新方法
- 核主成分分析方法——特征提取,去
- 计算方法上机程序——拉格朗日插值
- DSP与PC通讯的几种方法
- 软件方法测试RTX时钟
- 数值分析 计算方法 牛顿插值 拉格朗
- Iris数据集分类,查看几种分类方法的
- 中文转化unicoder码的方法
- 关于角点检测算法HarrisForstner经典算子
- 包络方法实现am调制
- LR0分析LR0分析LR0分析LR0分析LR0分析
- 编译原理LR(0)语法分析
- verilog 实现任意分频方法
- 计算方法上机程序之龙贝格求积公式
- 编译原理:LR分析程序
- 解决WPE进不了游戏的最佳方法(闭屏
- win2003 sp2 拒绝访问 解决方法
- 解决在Windows XP SP2下不能显示验证码的
- OFDM 系统PAPR减小的三种经典方法
- FANUC各硬件连接规格,型号,和连接方
评论
共有 条评论