编译原理之最左推导和最右推导

符号串的最左推导及最右推导

 

需求分析

 

1)输入一个文法,可以有多个非终结符号,每个非终结符号可有多条规则。

 

2)输入要分析的符号串

 

3)分别采用最左推导和最右推导进行符号串的分析,请输出推导过程。

 

文法为:

E->CB

C->c

B->b

 

假如有个要分析的字符串为EB

最左推导的分析为

1         CBB

2         cBB

3         cbB

4         cbb

最右推导的分析为

1         Eb

2         CBb

3         cBb

4         cbb

 

 

1 输入文法

2 输入要分析的字符串

3 选择适当的文法

4 判断是否要分析的字符串已经分析完

N

5  输出分析结果并结束

1 输入文法

2 输入要分析的字符串

3 选择适当的文法

4 判断是否要分析的字符串已经分析完

N

5  输出分析结果并结束

Y

详细设计

1.界面设计

利用VC++的MFC的单对话框做模板,输入文法和要分析的字符串分别用一个Text来输入,输出的最左推导和最右推导结果在ListBox,一个按钮来确认

 

2.模块算法(伪代码)

(1)   最左推导

while(这不是最后一个字符)

{
if(
这是一个非终结符号)

   文法分析字符串

把字符串放进链表头

   输出当前分析的字符串

else

   指向后一个字符

}

(2)   最右推导

while(这不是最后一个字符)

{
if(
这是一个非终结符号)

   文法分析字符串

把字符串放进链表尾

   输出当前分析的字符串

else

   指向前一个字符

}

 

3)何为非终结符号

      E->CD

      可以看出凡是在箭头左边的为非终结符号

4)分析文法表

     例如E->C

         C->c

      由此可见:

->左边的为非终结符号,->右边的为要分析的文法

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值