实验二语法分析程序设计与实现.docx
- 文档编号:28320793
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:11
- 大小:103.28KB
实验二语法分析程序设计与实现.docx
《实验二语法分析程序设计与实现.docx》由会员分享,可在线阅读,更多相关《实验二语法分析程序设计与实现.docx(11页珍藏版)》请在冰豆网上搜索。
实验二语法分析程序设计与实现
实验二语法分析程序设计与实现
一、实验目的
任选一种有代表性的语法分析方法,如算符优先法、递归下降法、LL
(1)、SLR
(1)、LR
(1)等,通过设计、编制、调试实现一个典型的语法分析程序,对实验一所得扫描器提供的单词序列进行语法检查和结构分析,实现并进一步掌握常用的语法分析方法。
二、基本实验内容与要求
选择对各种常见高级程序设计语言都较为通用的语法结构——算术表达式的一个简化子集——作为分析对象,根据如下描述其语法结构的BNF定义G2[<算术表达式>],任选一种学过的语法分析方法,针对运算对象为无符号常数和变量的四则运算,设计并实现一个语法分析程序。
G2[<算术表达式>]:
<算术表达式>→<项>|<算术表达式>+<项>|<算术表达式>-<项>
<项>→<因式>|<项>*<因式>|<项>/<因式>
<因式>→<运算对象>|(<算术表达式>)
若将语法范畴<算术表达式>、<项>、<因式>和<运算对象>分别用E、T、F和i代表,则G2可写成:
G2[E]:
E→T|E+T|E-TT→F|T*F|T/FF→i|(E)
输入:
由实验一输出的单词串,例如:
UCON,PL,UCON,MU,ID······
输出:
若输入源程序中的符号串是给定文法的句子,则输出“RIGHT”,并且给出每一步分析过程;若不是句子,即输入串有错误,则输出“ERROR”,并且显示分析至此所得的中间结果,如分析栈、符号栈中的信息等,以及必要的出错说明信息。
要求:
1、确定语法分析程序的流程图,同时考虑相应的数据结构,编写一个语法分析源程序。
2、将词法、语法分析合在一起构成一个完整的程序,并调试成功。
3、供测试的例子应包括符合语法规则的语句,及分析程序能判别的若干错例。
对于所输入的字符串,不论对错,都应有明确的信息输出。
三、问题分析及源程序
LL1文法:
改写文法为:
E->TGe
G>+TGg
T->FSt
F->-TGg1
G->^g2
S->*FSs
T->/FSs1
S->^s2
F->(E)f
G->if1
分析表:
i
+
-
*
/
(
)
#
E
e
e
G
g
g1
g2
g2
T
t
t
S
s2
s2
s
s1
s2
s2
F
f1
f
LL1源程序
#include
#include
#include
#include
charA[30];/*分析栈*/
charB[30];/*剩余串*/
charv1[20]={'i','+','-','*','/','(',')','#'};/*终结符*/
charv2[20]={'E','G','T','S','F'};/*非终结符*/
intj=0,b=0,top=0,l;/*L为输入串长度*/
classtype/*产生式类型定义*/
{public:
charorigin;/*大写字符*/
chararray[5];/*产生式右边字符*/
intlength;/*字符个数*/
};
typee,t,g,g1,g2,s,s1,s2,f,f1;/*类对象*/
typeC[10][10];/*预测分析表*/
voidprint()/*输出分析栈*/
{
inta;
for(a=0;a<=top+1;a++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验二 语法分析程序设计与实现 实验 语法分析 程序设计 实现