LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc

上传人:b****1 文档编号:13174400 上传时间:2022-10-07 格式:DOC 页数:15 大小:271KB
下载 相关 举报
LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc_第1页
第1页 / 共15页
LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc_第2页
第2页 / 共15页
LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc_第3页
第3页 / 共15页
LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc_第4页
第4页 / 共15页
LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc

《LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc》由会员分享,可在线阅读,更多相关《LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc(15页珍藏版)》请在冰豆网上搜索。

LL(1)语法分析设计原理与实现技术实验报告文档Word文档格式.doc

A→+|-

M→*|/

[实验说明]

终结符号i为用户定义的简单变量,即标识符的定义。

[设计要求]

(1)输入串应是词法分析的输出二元式序列,即某算术表达式“实验项目一”的输出结果。

输出为输入串是否为该文法定义的算术表达式的判断结果;

(2)LL

(1)分析过程应能发现输入串出错;

(3)设计两个测试用例(尽可能完备,正确和出错),并给出测试结果。

三、实验环境:

操作系统:

Windows7

软件:

VC++6.0

四、程序功能描述:

l提供了文件输入方式,且输入的内容为二元式序列;

l能够对输入的字符串做出正确的LL

(1)分析判断,并给出判断结果,判断结果输出到文件,并显示在屏幕;

l能发现输入串中的错误,包含非法字符,输入不匹配等;

l能够处理一些可预见性的错误,如文件不存在,输入非法等。

五、数据结构设计:

全局:

局部(main()中):

六、程序结构描述:

l设计方法:

本程序采用从文件读取的输入方式,输入的内容需为二元式序列,然后按照LL

(1)分析的方法对输入的字符串进行分析判断,并输出判断结果,程序通过对输入串的检查能够发现输入串中的错误。

程序规定的单词符号及其种别码见下表:

单词符号及其种别码表

单词符号

种别码

1

*

5

2

/

6

+

3

i

7

-

4

#

8

分析表

E

E→TG

G

G→ATG

G→ε

T

T→FH

H

H→ε

H→MFH

F

F→i

F→(E)

A

A→+

A→-

M

M→*

M→/

l主要函数说明:

check_VT(charch):

bool型函数,检查ch是否为终结字符,是则返回true;

create_analyseTable():

构建分析表函数,无返回值;

error(FILE*fp):

输出错误,表示不是该文法的句子,参数fp用于退出前将打开的文件关闭;

getnum_VN(charch):

int型函数,查找ch在非终结字符中的位置并返回;

getnum_VT(charch):

int型函数,查找ch在终结字符中的位置并返回;

justify():

bool型函数,判断文件读取内容是否合法,包括检查非法字符和不匹配现象,出错返回false,否则返回true;

main():

主函数。

l函数调用关系说明:

main()调用check_VT(charch)、create_analyseTable()、error(FILE*fp)、getnum_VN(charch)、getnum_VT(charch)、justify();

l执行框图:

七、实验过程结果截图:

l测试用例一:

i+i*i/i#

l测试用例二:

i+i*i/#

八、实验总结:

l实验心得:

通过本次实验我锻炼了自己的上机操作能力及编程能力,并对理论知识有了进一步的了解。

老师提供的LL

(1)分析法的流程图给了我很大的帮助,使得本实验基本思路变得很清晰,用较为简单的算法就能实现,程序的难点是产生式结构体的构造、分析表的构造、解决实验中遇到的问题也花费了一部分时间,我增长了处理关于文件错误的能力。

l实验中遇到的问题及解决方法:

问题主要有

i.从文件输入二元式时,需要检查输入的内容是否符合程序规定的字符种别码,解决方法是用了两个字符数组token,token2,分别记录种别码和字符,并增加了一个函数justify()根据既定的种别码表判断;

ii.当输入内容不匹配或输入内容非法时要退出程序,此时若不关闭已经打开的文件可能导致文件内容受到破坏;

解决方法是给error()函数设置一个文件指针变量参数FILE*fp,在退出程序之前通过fp关闭文件

l程序的自我评价:

此程序实现了要求中的所有功能,并增加了输入串错误检测的功能,但因编程能力及经验的有限,其中有的地方不免有些繁杂,还有一些潜藏的问题,需要进一步测试与修改来提高程序的健壮性。

九、程序清单:

/****************************************************

课题名称:

作者:

房皓进修生13410801

最后修改时间:

2014.4.30

***************************************************/

/**************************************************单词符号及其分类编码

单词符号 种别码

( 1

) 2

+ 3

- 4

* 5

/ 6

i 7

# 8

/**********************文法**********************

E→TE′

T→FT′

F→(E)|i

A→+|-

M→*|/

/********************改为等价文法**************

G→ATG|ε

H→MFH|ε

F→(E)|i

M→*|/

/*********************分析表************************

i + - * / ( ) #

E E→TG E→TG

G G→ATG G→ATG G→ε G→ε

T T→FH T→FH

H H→ε H→ε H→MFH H→MFH H→ε H→ε

F F→i F→(E)

A A→+ A→-

M M→* M→/

/***************************************************/

#include<

iostream>

conio.h>

string.h>

usingnamespacestd;

#defineMAX50

charanalyseStack[MAX];

//分析栈

chartoken[MAX];

//输入串

typedefstructCSS //产生式结构体

{

charleft;

charright[5];

intright_length;

}CSS;

CSSE,G,G1,T,H,H1,F,F1,A,A1,M,M1;

CSSanalyseTable[7][8];

voiderror(FILE*fp)

fprintf(fp,"

%s"

"

FAIL!

"

);

fclose(fp);

cout<

<

endl;

exit(0);

}

booljustify(charch,inti) //判断文件读取内容是否合法,包括检查非法字符和不匹配现象

switch(ch)

{

case'

1'

:

if(token[i]!

='

('

returnfalse;

break;

2'

)'

3'

+'

4'

-'

5'

*'

6'

/'

7'

i'

8'

#'

default:

returnfalse;

}

returntrue;

boolcheck_VT(charch)

if(ch=='

||ch=='

returntrue;

returnfalse;

intgetnum_VN(charch)

charVN[7]={'

E'

'

G'

T'

H'

F'

A'

M'

};

inti;

for(i=0;

i<

7;

i++)

if(ch==VN[i])

returni;

intgetnum_VT(charch)

charVT[8]={'

8;

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

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1