编译原理,为文法G构造语法分析的预测分析程序

注:文章来自于我的博客shawnluo.com,欢迎访问~!

 

文法G[S]如下:

S->aAaB|bAbB

A->S|db

B->bB|a

分析句子adbaba

要求:

提前消除文法的左递归及提取左公共因子。

求出FIRST集、FOLLOW集、SELECT集、判空、输出预测分析表、

输出对句子的分析过程。

一、主要内容

1、检查文法是否为LL(1)文法

2、代码介绍:

(1)初始定义参数,给定文法的开始符号、非终结符、终结符、文法产生式。定义三个字典用来表示FIRST集、FOLLOW集、SELECT集。

(移植到其他文法上只需修改这一部分初始定义的参数,其余的程序都是通用的。)

《编译原理,为文法G构造语法分析的预测分析程序。》

(2)初始化函数init(),打印开始符号、文法产生式。并将每个非终结符加入FIRST集、FOLLOW集作为“键”,同时将其“值”置空;将每个产生式加入SELECT集作为“键”,同时将其“值”置空。

再向开始符号G的FOLLOW集中加入“#”

《编译原理,为文法G构造语法分析的预测分析程序。》

(3)求FIRST集

①getFirst()函数,根据每条产生式,求出每个非终结符的FIRST集。

这里有两种情况:

I.产生式右部第一个元素为终结符(也即小写字母)的情况。将产生式按“->”分为左部、右部,然后判断右部第一个元素是否为小写字母(if not part_right[0].isupper())。如果是,说明该元素为终结符,则直接将其加入左部的非终结符的FIRST集中。

II.产生式右部第一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值