自顶向下语法分析器的设计与实现

一、实验目的

       根据某一文法编制调试自顶向下语法分析器(递归下降分析程序、 LL1 )分析程序),以便对任意输入的符号串进行自顶向下的语法分析。本次实验的目的主要是加深对自顶向下的语法分析法的理解。

1. 递归下降分析器

实验设计思想:利用函数之间的递归调用模拟语法树自上而下的构造过程。

实验算法 :

为文法 G 的每个非终结符号 U 构造一个递归过程,不妨命名为 U

U 的产生式的右边指出这个过程的代码结构:

(1) 若是终结符号,则和向前看符号对照,若匹配则向前进一个符号;否则出错。

(2) 若是非终结符号,则调用与此非终结符对应的过程。当 A 的右部有多个产生式时,可用选择结构实现。具体为:

1 )对于每个非终结符号 Uu1|u2|…|un 处理的方法如下:

U( )

{

ch= 当前符号 ;

if(ch 可能是 u1 字的开头 ) 处理 u1 的程序部分 ;

else if(ch 可能是 u2 字的开头 ) 处理 u2 的程序部分 ;

else error()

}

2 )对于每个右部 u1x1x2…xn 的处理架构如下:

处理 x1 的程序;

处理 x2 的程序;

处理 xn 的程序;

3 )如果右部为空,则不处理。

4 )对于右部中的每个符号 xi

① 如果 xi 为终结符号:

if(xi= = 当前的符号 )

{

    NextChar()

    return;

   }

else

出错处理

② 如果 xi 为非终结符号,直接调用相应的过程 xi() 

说明: NextChar 为前进一个字符函数。

2.LL(1) 下降分析器

实验设计思想:利用 LL1 )控制程序根据显示栈栈顶内容、向前看符号以及 LL1 )分析表,对输入符号串自上而下的分析。

二、实验过程和指导

程序要求

程序输入 / 输出示例:

对下列文法,用递归下降分析法 /LL(1) 分析法, 对任意输入的符号串进行分析:

1ETG

2G+TG|TG

3G →ε

4TFS

5S*FS|/FS

6S →ε

7F(E)

8Fi

输出的格式如下:

1. 递归下降分析程序 /LL(1) 分析程序编制人:姓名,学号,班级

2. 输入一以 # 结束的符号串 ( 包括 +-*/ () i#)在此位置输入符号串例如: i+i*i#

3. 输出结果: i+i*i# 为合法符号串

4. 输出从文法开始符到句子的推导的全过程,或输出以下的分析过程:  

步骤

分析栈

剩余输入串

所用产生式

1

E

i+i*i#

ETG

 

 

 

 

5. 输入符号串 为非法符号串 ( 或者为合法符号串 )

       输入一符号串如 i+i*# ,要求输出为“ i+i*# 为非法符号串”。

 

实验代码如下:

 

 

 


实验结果如下:



 

 

  • 4
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值