词法
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
实验报告
北京农学院学院
《编译原理》课程设计
课程设计
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目: 词法分析器 作者所在学院: 计算机与信息工程学院 作者所在专业: 计算机科学与技术 作者所在班级: 200720721 作 者 学 号: 200720721242 作 者 姓 名 :
指导教师姓名: 完 成 时 间 : 2010年7月14日
2010 年 7月 14日
课程设计任务
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
《编译原理》课程设计 2010.7.14 课题名称 完成时间
杨焱 讲师 指导教师 职称 学生姓名 刘淑丽 班级 200720721
总体设计要求
总体设计要求:
每个学生按照课程设计要求,在规定的时间内独立完成。
题目:
编译程序构造
涉及内容:
编译器的结构,词法分析、语法分析
工作内容及时间进度安排
第一天:设计动员,布置课程设计任务,查阅资料,制定
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,进行程序方案设计。
第一天:编写和调试程序
第三天:编写和调试程序,
第四天:编写和调试程序,整理,提交调研报告,撰写设计报告。
第五天:验收,提交设计报告,评定成绩。
课程设计成果
1、调研报告一份,课程设计报告书一份
2、源程序清单一份
3、成果使用说明书一份
词法分析器
一、实验目的:
运用编译系统的设计原理,设计并实现编译系统的前端词法分析器和语法分析器 二、实验内容:
1)设计思路和方法:
设计思路:
可通过两种途径来构造词法分析程序。
1.根据对语言中各类单词的某种描述或定义,用手工的方式构造词法分析程序。可通过文法或状态转换图利用某种语言直接编写词法分析程序。
2.词法分析程序的自动生成,用正规式对语言中的各类单词符号进行词形描述,指出在识别单词时,词法分析程序所应进行的语义处理工作,然后由一个语法分析程序的构造程序对上述信息进行加工,便能得到所需的语法分析程序。词法分析的输入是给定的模型语言,输出为单词序列。输入的源程序可以看成是一个字符串序列,分词的输出为单词序列,单词是一个有共同含义的字符集。此法分析器设计时,输入的源程序以文件的形式存储在外部。主控程序通过打开文件调用待分析的源程序。
设计方法:
词法分析中需要为源程序设计一个符号
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
,符号表用来保存标识符信息,为单词语法分析和语义分析服务。
在词法分析程序设计中,先以只读方式读取一个文件,自文件头开始扫描文本,滤去开头的空格、回车符、换行符等~读取的字符送入缓冲区。扫描第一个字符,看匹配的类型,并进行相应的类型分析,满足判断类型时,输出其种别码和值。判断时要注意保留字和识别符之间的不同,单目运算符和双目运算符之间的不同。因此可用指针进行处理。还必须熟悉字符串函数的使用。并要对非法字符作出错误提示。文本扫描结束要判断词法分析是否成功。最后是关闭文件,释放指针。
三、设计方案介绍
程序的流程或结构(流程图)
四、程序代码以注释:
#include "stdafx.h"
#include
#include #include
#include
#include
#include
using namespace std;
string token;
bool isLetter(char ch){ //字符
if ((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) return true;
else return false;
}
bool isDigit(char ch){ //常数
if (ch>='0' && ch<='9') return true;
else return false;
}
bool isP(char ch){ //运算
if(ch=='+'||ch=='*'||ch=='-'||ch=='/') return true;
//ch==':'||ch==','||ch=='='||ch==';'||ch=='('||ch==')'
else return false;
}
bool isJ(char ch){ //界符
if(ch==','||ch==';'||ch=='.'||ch=='('||ch==')'||ch=='['||ch==']'||ch=='='||
ch==':'||ch=='<'||ch=='>'||ch=='{'||ch=='}'||ch=='#') return true;
//
else return false;
}
bool isBlank(char ch){ //空字符
if(ch==' '||ch=='\t') return true;
else return false;
}
void cifa(string src,char ktt[][20]);
int main(){
string src,ste,s;
char ch0,ch,ch1[2];
char
ktt[48][20]={"and","begin","const","div","do","else","end","function","if","int
eger",
"not","or","procedure","program","read","real","then","type","var","while",
"write","标识符","无符号数",
",",";",":",".","(",")","[","]","..","++","--","+","-","*","/","=","<",">",
"<>","<="
,">=",":=","{","}","#"};
int pos=0;
FILE *fp; //外部文件
fp=fopen("d:\\in.txt","r"); //打开外部文件和路径
ch0=fgetc(fp);
while(ch0!=EOF)
{
//if(ch0!='\t'){src+=ch0;}
src+=ch0;
ch0=fgetc(fp);
}
src+='#';
cout<>ste;
break;
}
}
if(j==48){ste=ste+"|"+"21";}
//cout<<" ";
cout<>ste;
break;
}
}
cout<>ste;
break;
}
}
if(i==2&&j==48)
{
i--; pos=pos-1;
ch=str[i];
str[i]='\0';
goto temp;
}
cout<0 then
begin
b:=b+1;
write(b)
end;
write(a,b,c);
end.
第八题((1) 扩充条件语句的语法图为:
条件 语句 else then If
语句
EBNF的语法描述为:〈条件语句〉?if〈条件〉then〈语句〉[else〈语句〉]
(2) 扩充repeat语句的语法图为:
resent Until 语句 条件
1
EBNF的语法描述为:〈repeat循环语句〉? repeat〈语句〉{;〈语句〉}until〈条件〉