《编译原理》课程实习报告Word格式文档下载.docx

上传人:b****4 文档编号:7099641 上传时间:2023-05-07 格式:DOCX 页数:17 大小:476.47KB
下载 相关 举报
《编译原理》课程实习报告Word格式文档下载.docx_第1页
第1页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第2页
第2页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第3页
第3页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第4页
第4页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第5页
第5页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第6页
第6页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第7页
第7页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第8页
第8页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第9页
第9页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第10页
第10页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第11页
第11页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第12页
第12页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第13页
第13页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第14页
第14页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第15页
第15页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第16页
第16页 / 共17页
《编译原理》课程实习报告Word格式文档下载.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

《编译原理》课程实习报告Word格式文档下载.docx

《《编译原理》课程实习报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《编译原理》课程实习报告Word格式文档下载.docx(17页珍藏版)》请在冰点文库上搜索。

《编译原理》课程实习报告Word格式文档下载.docx

1.1实习目的

构造一个小语言的语法分析程序。

1.2实习要求

(1)输入属性字文件,输出源程序是否符合语法要求的结果:

正确——该程序符合语法要求。

错误——指出错误位置。

(2)运行实例:

例1:

输入i:

=1+;

输出表达式错误。

例2:

输入programex1;

begini:

=1end.

输出该程序是正确的。

1.3要求分析

1.3.1输入部分

输入为文法源程序,定义CString类型变量m_EnterString,用于获取编辑框1的输入,将其转换为char类型的数组,用s保存,即char*s=m_EnterString.GetBuffer()。

1.3.2输出部分

对于错误的程序,输出相应错误类型;

对于正确的程序,输出该程序是正确的。

定义CString类型变量m_OutputString,用于输出词法分析结果到编辑框2,用如下函数给m_OutputString添加输出内容,如程序正确时代码:

m_OutputString.Insert(m_OutputString.GetLength(),"

该程序是正确的"

);

如图所示:

1.3.3待分析的简单语言的语法

用扩充的BNF表示如下:

⑴<

程序>

=programbegin<

语句串>

end|begin<

end

⑵<

=<

语句>

{;

<

}

⑶<

赋值语句>

⑷<

=ID:

表达式>

⑸<

项>

{+<

|-<

⑹<

因子>

{*<

|/<

⑺<

=ID|NUM|(<

1.3.4语法中的各种单词符号对应的类别码

单词符号

类别码

类别码

begin

1

18

2

=

19

if

3

20

then

4

>

21

else

5

22

while

6

23

program

7

24

int

8

25

char

9

26

标识符

10

{

27

常数

11

28

+

12

'

29

-

13

;

30

*

14

31

/

15

[

32

16

]

33

:

17

#

34

其中对应于在词法分析程序中,变化的是将关键字do改为program,和begin两者至少出现一个作为程序的开始标志。

2.设计

2.1数据结构

定义了以下字符串类型数据:

CStringm_EnterString:

用于接受编辑框1输入的源程序

CStringm_OutputString;

用于保存输出到编辑框2的内容,即输出源程序是正确的还是错误的,对于错误的程序还需要说明错误类型

char*s=m_EnterString.GetBuffer():

用于将输入的Cstring类型转换为字符数组

类型

界面数据结构:

(仅在词法分析程序的基础上改变了以下组件的位置与大小)

IDC_STATIC1(Group-boxControl)放输入框的框

IDC_STATIC2(Group-boxControl)放输出框的框

IDC_EDIT1(EditControl)输入编辑框

IDC_EDIT2(EditControl)输出编辑框

IDOK(ButtonControl)确定按钮

IDCANCEL(ButtonControl)取消按钮

IDD_CIFA_DIALOG(Dialog)整个界面框

界面如下图所示:

2.2.算法及程序流程图

2.2.1算法设计:

算法的基本任务是在已完成的词法分析程序的基础上,对源程序的语法的正确性进行判断,编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析,对于输入的程序无语法错误的源程序,则输出该程序是正确的,若输入的源程序有语法错误,则输出相应的错误类型,具体见流程图。

2.2.1程序流程图如下:

A.主程序示意图如下图所示:

B.

递归下降分析程序示意图如下图所示:

C.

语句串分析过程示意图如下图所示:

D.statement语句分析程序流程:

E.expression表达式分析函数如下图所示:

F.term分析函数如下图所示:

G.

Factor函数分析过程如下图所示:

以上流程图中的出错处理部分,对于不同部分的出错处理在程序中并不一致,而是对应于不同的错误作出相应的错误处理,本程序中即为输出不同的源程序语法错误提示。

如:

2.3.界面

3.程序运行实例

3.1实例1:

以program开头,以end结尾,且无语法错误的程序

3.2实例2

以begin开头,以end结尾,且无语法错误的程序

3.3非合法语法输入

A.表达式错误:

错误语句:

inti:

=3+;

表达式不完整

j:

=3*(i-3;

表达式中有“(”无“)”

=5+i)*4;

表达式中有“)”无“(”

charch:

='

c'

表达式结束无“;

B.不以program或begin开关:

C.不以end结尾:

4.部分程序核心源代码

voidCcyufaDlg:

Start()

char*s=m_EnterString.GetBuffer();

scaner();

lrparser();

m_OutputString.Insert(m_OutputString.GetLength(),"

#0\r\n"

intCyufaDlg:

lrparser()

intschain=0;

kk=0;

if(syn==1)

{scaner();

schain=yucu();

if(syn==6)

if((syn==0)&

&

(kk==0)) 

printf("

该程序是正确的\n"

}

else{if(kk!

=1)printf("

结尾无end标志!

\n"

kk=1;

getch();

exit(0);

else{printf("

开头无program或begin!

return(schain);

voidCyufaDlg:

scaner()

sum=0;

for(m=0;

m<

8;

m++)token[m++]=NULL;

m=0;

ch=prog[p++];

while(ch=='

'

)ch=prog[p++];

if(((ch<

z'

)&

(ch>

a'

))||((ch<

Z'

A'

)))

{while(((ch<

))||((ch>

0'

(ch<

9'

{token[m++]=ch;

p--;

syn=10;

token[m++]='

\0'

for(n=0;

n<

6;

n++)

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

{syn=n+1;

break;

elseif((ch>

))

{while((ch>

{sum=sum*10+ch-'

p--;

syn=11;

elseswitch(ch)

{case'

m=0;

if(ch=='

syn=21;

elseif(ch=='

syn=22;

else

syn=20;

case'

{syn=24;

{syn=23;

{syn=18;

{syn=17;

+'

syn=13;

-'

syn=14;

*'

syn=15;

break;

/'

syn=16;

('

syn=27;

)'

syn=28;

syn=25;

syn=26;

#'

syn=0;

default:

syn=-1;

5.总结

1.本次实验让我对C语言有了更多的了解和更深刻的认知。

把以前的的知识又重新复习了一遍。

2.加深对语法分析原理的理解和对递归下降分析法的理解。

更加知道了用递归下降分析语法的步骤。

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

当前位置:首页 > 求职职场 > 面试

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

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