编译原理 优先表构建

本文档介绍了如何使用C++来构建优先表,详细阐述了FIRSTVT和LASTVT集合的构建算法,并给出了优先表的构建过程。通过对文法5.4的分析,展示了如何依据文法规则确定符号间的优先级关系,最终生成所需优先表。
摘要由CSDN通过智能技术生成

1.设计目的及设计要求

设计内容及要求:对任一给定的算符优先文法 G,构造其优先表。要求: 首先实现对于非终结符 P 的 FIRSTVT(P)构造算法和 LASTVT(P)构造算法,再实现 教材 P.92 给出的优先表构造算法。以教材 P.90 例 5.4 文法为例,程序生成表 5.1

文法5.4

E->E+T|T

T->T*F|F

F->P↑F|P

P->(E)|i

2.设计内容、主要算法描述

优先表构建程序:

  1. 将所给的文法进行分析,将string进行分解
  2. 通过使用firstvt构建算法,多次循环构建firstvt集合
  3. 通过使用lastvt构建算法,多次循环构建lastvt集合
  4. 通过firstvt和lastvt集合,在寻找不同的位置,根据优先表构建算法,将各个优先关系填入表格得到所需的算法。

a的优先级低于b

a < b: 文法中有形如A→…aB…的产生式而B+b…或B+Cb…

a的优先级等于b

a = b: 文法中有形如A→…ab…或者A→…aBb…的产生式

a的优先级高于b

a > b: 文法中有形如A…Bb…的产生式,而B+…a或B+…aC

算符的优先关系是有序的

如果a > b,不能推出b < a

如果a > b,有可能b > a

如果a > b, b > c,不一定a > c

FIRSTVT集合构建

a) 若有产生式 P→a••• 或 p→Qa••• 
则 a
FIRSTVT(P)

b) 若有产生式 P→Q••• ,
若 a
FIRSTVT(Q)
则 aFIRSTVT(P)

LASTVT集合构建

a) 若有产生式 P→•••a 或 p→•••aQ 
则 a
LASTVT(P)

b) 若有产生式 P→•••Q ,
若 a
LASTVT(Q)
则 aLASTVT(P)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值