编译原理实验查填符号表含源代码和运行结果文档格式.docx

上传人:b****3 文档编号:7861156 上传时间:2023-05-09 格式:DOCX 页数:11 大小:91.77KB
下载 相关 举报
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第1页
第1页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第2页
第2页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第3页
第3页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第4页
第4页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第5页
第5页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第6页
第6页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第7页
第7页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第8页
第8页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第9页
第9页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第10页
第10页 / 共11页
编译原理实验查填符号表含源代码和运行结果文档格式.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

编译原理实验查填符号表含源代码和运行结果文档格式.docx

《编译原理实验查填符号表含源代码和运行结果文档格式.docx》由会员分享,可在线阅读,更多相关《编译原理实验查填符号表含源代码和运行结果文档格式.docx(11页珍藏版)》请在冰点文库上搜索。

编译原理实验查填符号表含源代码和运行结果文档格式.docx

否则将其填入符号表,并分配编号,确定位置,输出该标识符。

2、输出标识符表。

实验环境

软件:

VC++

 

实验前准备

1、方案设计:

1准备模拟数据:

由于是识别符合c语言规定的标识符,故本实验中使用“测试文件.c”

2写出c语言标识符的正规式定义:

letter_→A|B|C|…Z|a|b|…z|_

digit→0|1|…9id→letter_(letter_|digit)*

3画出不确定的有限自动机

不确定的有限自动机如下:

进行化简:

A={1}

B={2,3,4,5,9}

C={3,4,5,6,8,9}

D={3,4,5,7,8,9}

状态转换表如下:

状态

letter_

digit

A

B

C

D

{A}{B,C,D}

化简后的确定有限自动机如下:

4程序思想:

该实验重点是构造识别标识符的函数。

程序中,使用的数据结构如下:

structrecord

{

charname[20];

};

typedefstructrecordRECORD;

record是用来记录标识符的名字,并且规定标识符的长度最大为20

structinforame))

{

j++;

}ame,teststring);

ine=j;

p->

length++;

}

2、程序设计

#include"

"

printf("

标识符%s在符号表的第%d行\n"

teststring,j+1);

fprintf(f,"

%s\t%5d\n"

"

r"

);

if(fp==NULL)

打开文件失败!

exit(0);

}xt"

w+"

xt”

xt”命令

INFORinformation;

0’xt"

}

}xt"

xt"

文件

if(table==NULL)

printf("

文件打开失败!

exit(0);

inti=0;

ame);

fwrite(&

[i],strlen(mark[i].name),1,table);

fprintf(table,"

%4d\n"

i+1);

xt”内容如下:

include1

stdio2

h3

int4

_qq5

temp6

char7

temp_s8

search9

str10

c11

void12

main13

m14

i15

printf16

please17

input18

a19

string20

gets21

puts22

the23

you24

getchar25

if26

can27

not28

find29

else30

is31

d32

n33

for34

return35

存放符号表的文件“符号表.txt”内容如下:

使用的模拟数据“测试文件.c”如下:

#include<

>

int_qq;

int3temp;

chartemp_s;

intsearch(charstr[80],charc);

voidmain()

{

charstr[80],c;

intm,i;

pleaseinputastring:

gets(str);

puts("

pleaseinputthecharyousearch"

c=getchar();

m=search(str,c);

if(m==-1)

cannotfind"

else

thecyousearchis%d\n"

m);

}

intsearch(charstr[80],charc)

inti;

for(i=0;

str[i]!

='

\0'

;

i++)

if(str[i]==c)

{

return(i);

}

return-1;

分析:

实验过程中最大的难题是文件的操作,因为之前关于文件的操作课程没有讲,再加上很久没写代码的原因,就先学了下文件操作,实验过程中最开始“结果.txt”总是空,后来知道原来是我在创建了该文件后就关闭了,在没有打开的情况下不能进行写入结果的操作;

还有就是刚开始的“符号表.txt”每个符号后面都有不同数目的“烫”,经分析知道这种情况下每个标识符都是强制的长度一致,都是20(定义的标识符最大长度是20),这是因为向文件中写入数据时:

fwrite(&

我把每次写入的数据块长度设为了sizeof(record),而该结果是20,所以导致每个标识符长度是20.

不过该实验还有一个地方需要改进,因为对于“23aa”这样的字符串“aa”按照规定应该不是一个标识符,而在这个试验中却也把“aa”识别为了一个标识符,本来想用一个char型history来记录上个读入字符来判断识别的字符串是不是以数字开头的某字符串的后部分,但是没成功,时间关系,我再思考下如何实现该功能。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2