2020-03-02 09:27:59 来源:范文大全收藏下载本文
一.实验序号:《编译原理》第一次实验
二.实验题目:词法分析
三.实验日期:2010.10
四.实验环境(操作系统,开发语言)
操作系统:Windows
开发语言:C
五.实验内容(实验要求)
a) 将标识符的词法改为“以大写字母或小写字母开头,后面可以跟大写字
母或小写字母或数字或下划线”。
b) 将中的表示相等关系的单词“=”改为“= =”
c) 将原来的无小数的数改为可以有小数的数
六.实验步骤
a)打开VC++,找到getsym()项目。
int getsym()
{...}
在getsym()函数中设置断点,F10逐过程调试
根据要求a修改为
if(ch>=\'a\'&&ch=\'A\'&&ch
往后面看,修改while(ch>=\'a\' && ch=\'0\' && ch=\'A\' && ch
b) 在检测赋值符号的程序段中找到等号 = 的判断代码,改变成为 = = 即
可。
c) 在获取整数数字的值的程序段后面添加判断小数点的代码。如果是,即
读取符号并且按照小数的要求将其缩小并且累加到总的符号串中。
七.实验体会(包括收获、心得体会、存在的问题及解决问题的方法、建议等)
通过实验,如果要修改代码的话,首先应该读懂源码,在修改之前了解到程序段的功能是什么,然后再在相应的行进行修改添加,再进行合理的调试。如果问题太过困难可以查询资料或与同学进行讨论
八.实验结果(关键源程序)
a)
int getsym()
{
int i,j,k;
while(ch==\' \'||ch==10||ch==9)/*忽略空格,换行和TAB*/{
getchdo;
}
if(ch>=\'a\'&&ch=\'A\'&&ch
k=0;
do{
if(k
{
a[k]=ch;
k++;
}
getchdo;
}while(ch>=\'a\' && ch=\'0\' && ch=\'A\' && ch
if(ch>=\'0\'&&ch
k=0;
num=0;
sym=number;
do{
//435
num=10*num+ch-\'0\';
k++;
getchdo;
}while(ch>=\'0\' && ch
if(ch==\'.\')
{
k++;
sym=period;
getchdo;
sym=number;
int div=10;
do{num=num+(ch-\'0\')/div;
k++;
getchdo;
div=div*10;
}while (ch>=\'0\'&&ch
}
b)
else
{
if(ch==\'>\')//检测大于或大于等于符号{
getchdo;
if(ch==\'=\')//add by M
{
sym=geq; //构成>=
getchdo;
}
else
{
sym=gtr; //否则就是一个单独的>号}
}
else
{
if(ch==\'=\')
{
getchdo;
if(ch==\'=\')
{
sym=deq;
getchdo;
}
else
{
sym=eql;
}
}
c)else
{if(ch == ’.’)
{k=10;
getchdo;
do{num=num+(ch-\'0\')/k;
k=k*10;
getchdo;
}while(ch>=\'0\'&&ch
}
人人范文网 m.inrrp.com.cn 手机版