语法分析报告

更新时间:2023-10-20 17:59:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验名称:

年 月 日

1、 实验目的

1、为初等函数运算语言构造LL(1)语法分析器。

2、掌握LL(1)语法分析器的方法,加深对自上而下语法分析原理的理解。 3、掌握设计、编制并调试LL(1)语法分析程序的思想和方法。

2、实验内容

一、根据初等函数运算语言运算法则,将语法模式用上下文无关文法表达。 注意运算的优先性,避免产生二义性文法。 二、将上述文法改写为LL(1)文法。 三、根据LL(1)文法给出预测分析表。

四、根据预测分析表,给出解析LL(1)文法的递归下降子程序。

五、本语法分析程序的输入是实验一生成的记号流;本程序需定义语法树的数据结构;语法分析的输出是一棵语法树。

六、当输入存在语法错误时,需给出语法错误的提示,指出语法错误发生的位置和错误类型。

注:实验前,修改了词法分析,使其生成的记号流输出到一个文本文件a.txt中,本实验是从a.txt中读取记号流对其进行语法分析

2.1 上下文无关文法

S0?S?B| S?A;S|ε A?id=B

B?B+T|B-T|T T?T*F|T/F|F

F?E|sinE|cosE|tgE|ctgE|logE|log(E,E)|lgE|lnE|E^E E?(B)|-E|id|num

注:本文法的?前面是一些赋值语句(如:a=x+y;) ?后面是一个算术表达式(如 a+b*sin(y)# 没有分号,以#结束)

2.2 LL(1)文法

S0?S?B|ε S?A;S|ε A?id=B B?TB1

B1?+TB1|-TB1|ε T?FT1

T1?*FT1|/FT1|ε

F?EL|logN| sinE|cosE|tgE|ctgE| lgE|lnE L?^E|ε N?(B,B)|E E?(B)|-E|id|num

2.3 First集和Follow集

First(E)= { ( - id num }

First(F)= { ( - id num sin cos tg ctg log lg ln } First(T1)={ * / ε }

First(T)={ ( - id num sin cos tg ctg log lg ln } First(B1)={ + - ε }

First(B)= { ( - id num sin cos tg ctg log lg ln } First(A)={ id } First(S)={ id ε}

First(S0)={id ? ε }

First(N)={ ( - id num sin cos tg ctg log lg ln }

First(L)={ ^ ε }

Follow(S0)= { # } Follow(S)={ ? }

Follow(B1)={ ) ; # , }

Follow(T1)={ + - ) # ; , } Follow(L)={ * / + - ) # ; }

记号表 符号 Sin 记号 0 符号 - Cos 1 * tg 2 / ctg 3 = log 4 lg 5 ln 6 ( 7 ) 8 , ; 9 { ? 10 } + 11 # 常量 变量 无法^ num id 识别的标示符 16 17 18 19 记号 12 13 14 15 20 21 22 23

预测分析表:

其中fun代表sin,cos,tg,ctg,lg,ln

3、 实验程序清单

输入记号流a.txt 语法分析器.cpp 语法分析报告.doc

4、 调试过程和运行结果

输出的是运用产生式展开的过程、匹配情况、以及出错处理情况,以及先序遍历语法二叉树

本文来源:https://www.bwwdw.com/article/2oaf.html

Top