第一范文网 - 专业文章范例文档资料分享平台

华科编译原理实验报告

来源:用户分享 时间:2025/5/28 22:29:29 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

或二进制浮点数(FCON)的内部形式,方法见教材第56页。(注:考虑能否采用C语言的库函数实现此语义处理工作。)

表II 包含语义处理过程的识别无符号数的状态矩阵

图1 识别表I所列语言中的部分单词的DFA及相关的语义过程

图1及程序一中所出现的语义变量及语义函数的含义和功能说明如下。

函数GETCHAR:每调用一次,就把扫描指示器当前所指示的源程序字符送入字符变量ch,然后把扫描指示器前推一个字符位置。

字符数组TOKEN:用来依次存放一个单词词文中的各个字符。

函数CAT:每调用一次,就把当前ch中的字符拼接于TOKEN中所存字符串的右边。

函数LOOKUP:每调用一次,就以TOKEN中的字符串查保留字表,若查到,就将相应关键字的类别码赋给整型变量c;否则将c置为零。

函数RETRACT:每调用一次,就把扫描指示器回退一个字符位置(即退回多读的那个字符)。 函数OUT:一般仅在进入终态时调用此函数,调用的形式为OUT(c,VAL)。其中,实参c为相应单词的类别码或其助记符;当所识别的单词为标识符和整数时,实参VAL为TOKEN(即词文分别为字母数字串和数字串),对于其余种类的单词,VAL均为空串。函数OUT的功能是,在送出一个单词的内部表示之后,返回到调用该词法分析程序的那个程序。

五、源程序 #include

#include char prog[80],token[6]; char ch;

int syn,p,m,n,sum;

char * rwtab[6]={\,\,\,\,\,\}; main() { p=0;

printf(\); do {

ch=getchar(); prog[p++]=ch; }while(ch!='#'); p=0; do {

scaner(); switch(syn) {

case 11:printf(\,syn,sum);break; case -1:printf(\); break; default:printf(\,syn,token); }

}while(syn!=0); getch(); }

/*词法扫描程序:*/ scaner() {

for(n=0;n<8;n++) token[n]=NULL; m=0;

ch=prog[p++];

while(ch==' ')ch=prog[p++];

if((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')) {

while((ch<='z'&&ch>='a')||(ch<='Z'&&ch>='A')||(ch<='9'&&ch>='0')) {

token[m++]=ch; ch=prog[p++]; }

token[m++]='\\0'; ch=prog[--p]; syn=10;

for(n=0;n<6;n++)

if(strcmp(token,rwtab[n])==0) {

syn=n+1; break; } } else

if((ch<='9'&&ch>='0')) { sum=0;

while((ch<='9'&&ch>='0')) {

sum=sum*10+ch-'0'; ch=prog[p++]; }

ch=prog[--p]; syn=11; } else switch(ch)

{

case '<':m=0;token[m++]=ch; ch=prog[p++]; if(ch=='>') { syn=21; token[m++]=ch; } else

if(ch=='=') { syn=22; token[m++]=ch; } else { syn=20; ch=prog[--p]; } break;

case '>':token[m++]=ch;

搜索更多关于: 华科编译原理实验报告 的文档
华科编译原理实验报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4t46014h5e20sz43252z_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top