当前位置:网站首页>ZUCC_编译语言原理与编译_实验08 语法分析 LR 分析
ZUCC_编译语言原理与编译_实验08 语法分析 LR 分析
2022-06-24 06:58:00 【星星不想卷】
编译语言原理与编译实验报告
| 课程名称 | 编程语言原理与编译 |
|---|---|
| 实验项目 | 语法分析 LR 分析 |
实验内容
阅读ppt,阅读教材第3章
理解LR(0) DFA的构建过程
简介构造:
构造NFA
构造DFA
- 利用子集构造法进行确定化后得到DFA
直接构造:
构造DFA
在LR(0)文法基础上增加增广文法,使分析器只有一个接收状态
在某个LR(0)文法的所有LR(0)项目中,点后面是非终结符的项目存在重复项目,这些项目集合称为项目集闭包,对应着DFA的一个状态(使用CLOSURE()函数)
从增广文法开始,遍历DFA状态里每个项目的后继LR(0)项目(使用GOTO()函数),每遍历一个就作为一个状态,并使用该符号链接。例如:
如果遇到归约项目,则该分支结束;当所有都结束后,构建DFA结束
理解如何从DFA状态图,进行LR分析表的构建
- 根据DFA中结点个数确定分析表内状态数
- 从DFA开始结点开始遍历,如果遇到终结符,则为ACTION跳转;如果遇到非终结符,则为GOTO跳转
- 对于ACTION表,如果DFA内的动作为归约项目,则为rn(归约)操作;如果不是归约项目,则为sn(移入)操作
教材 p50 3.4.3 理解冲突产生原因
- 移进/归约冲突:在一个状态内存在多个项目,其一要求执行移进操作,其一要求执行归约项目
- 归约/归约冲突:在一个状态内存在多个项目,两者要求执行不同的归约操作
- 混合冲突:混合移进/归约冲突、归约/归约冲突
如果没有冲突就为LR(0)文法,否则为LR(1)文法
p51 理解图3-13LR 状态表,找到其中的冲突项
在状态9、11、13、15均存在移进/归约冲突
找到其中的 Action Table(动作表) ,Goto Table(状态转换表)的定义
教材 p50 3.4.2.优先级指导
理解在语法说明文件中,优先级的指定方式
什么是左/右结合/非结合 ,如何在语法说明文件里面声明 p53
- +和-是左结合的且具有相同的优先级:*和/是左结合的且它们的优先级高于+;^是右结合的且具有最高优先级:=和!=是非结合的,它们的优先級低于+
- 利用LR(1)的展望符来限制,只有当下一个输入为展望符才进行归约操作
如何用 %prec 指示,自定义某规则的优先级 p53
- 当规则和单词的优先级相等时,用%1eft 指明的优先级偏向于归约,%right 指明的偏向于移进,而由%nonassoo 指明的则导致一个错误动作。
http://mdaines.github.io/grammophone/# 核对你的作业
设有如下文法
S -> S A b .
S -> a c b .
A -> b B c .
A -> b c .
B -> b a .
B -> A c .
分析栈上的内容如下,请分别写出可归约串是什么(▽ 表示栈底):
(a)▽SSAb
(b)▽SSbbc
(c)▽SbBc
(d)▽Sbbc
(a)可归约串:SAb
(b)可归约串:bc
(c)可归约串:bBc
(d)可归约串:bc
设有如下输入串,请用2中的文法,采用 shift/reduce分析下面的串。
请按ppt 中 构造表格,列出分析栈,输入流, shift/reduce操作 的内容

(a) acb
(b) acbbcb
(c) acbbbacb
(d) acbbbcccb
(e) acbbcbbcb
步骤 栈 输入字符串 0 $ acb$ 2 $a cb$ 5 $ac b$ 11 $acb $ acc $ $ 步骤 栈 输入字符串 0 $ acbbcb$ 2 $a cbbcb$ 5 $ac bbcb$ 11 $acb bcb$ 0 $ bcb$ 1 $S bcb$ 4 $Sb cb$ 8 $Sbc b$ 1 $SA b$ 3 $SA b$ 6 $SAb $ acc $ $ 步骤 栈 输入字符串 0 $ acbbbacb$ 2 $a cbbbacb$ 5 $ac bbbacb$ 11 $acb bbacb$ 0 $ bbacb$ 1 $S bbacb$ 4 $Sb bacb$ 9 $Sbb acb$ 13 $Sbba cb$ 4 $Sb cb$ 7 $SbB cb$ 12 $SbBc b$ 1 $S b$ 3 $SA b$ 6 $SAb $ acc $ $ 步骤 栈 输入字符串 0 $ acbbbcccb$ 2 $a cbbbcccb$ 5 $ac bbbcccb$ 11 $acb bbcccb$ 0 $ bbcccb$ 1 $S bbcccb$ 4 $Sb bcccb$ 9 $Sbb cccb$ 15 $Sbbc ccb$ 4 $Sb ccb$ 10 $SbA ccb$ 16 $SbAc cb$ 4 $Sb cb$ 7 $SbB cb$ 12 $SbBc b$ 1 $S b$ 3 $SA b$ 6 $SAb $ acc $ $ 步骤 栈 输入字符串 0 $ acbbcbbcb$ 2 $a cbbcbbcb$ 5 $ac bbcbbcb$ 11 $acb bcbbcb$ 0 $ bcbbcb$ 1 $S bcbbcb$ 4 $Sb cbbcb$ 8 $Sbc bbcb$ 1 $S bbcb$ 3 $SA bbcb$ 6 $SAb bcb$ 0 $ bcb$ 1 $S bcb$ 4 $Sb cb$ 8 $Sbc b$ 1 $S b$ 3 $SA b$ 6 $SAb $ acc $ $
设有如下文法和输入串,请说明是否有shift/reduce冲突 或者 reduce/reduce 冲突
S -> S a b .
S -> b A .
A -> b b .
A -> b A .
A -> b b c .
A -> c .
输入串
(a) b c
(b) b b c a b
(c) b a c b

步骤 栈 输入字符串 0 $ bc$ 2 $b c$ 6 $bc $ 2 $b $ 4 $bA $ acc $ $ 步骤 栈 输入字符串 0 $ bbcab$ 2 $b bcab$ 5 $bb cab$ 6 $bbc ab$ 5 $bb ab$ 9 $bbA ab$ 2 $b ab$ 4 $bA ab$ 0 $ ab$ 1 $S ab$ 3 $Sa b$ 7 $Sab $ acc $ $ 步骤 栈 输入字符串 0 $ bacb$ 2 $b acb$ err
存在reduce/reduce 冲突,但情况3并不是因为这个报错,而是一个非产生式报错
阅读lecture03.p31.fsyacc.pdf p31页 掌握fslex,fsyacc使用
阅读 calcvar 中
- 词法说明 lexer.fsl
- 语法说明 parser.fsy
- 调试运行代码
- 理解优先级指导的写法
- 阅读 ReadME

plzoofs calcvar项目,给fsyacc 工具添加 -v 参数,查看生成语法分析器的 LR 状态表
// calcvar.fsproj
<FsYacc *Include*="parser.fsy">
<OtherFlags> -v --module Parser</OtherFlags>
</FsYacc>
注意下特定状态的
- action table
- goto table

阅读Fun语言中
- 词法说明 FunLex.fsl
- 语法说明 FunPar.fsy
- 调试运行代码
- 同上
fsyacc工具添加-v查看LR分析状态表

阅读MicroC 语法分析器
- https://gitee.com/sigcc/plzoofs/blob/master/microc/CPar.fsy
- 由于
C语言的指针,数组语法分析比较复杂,构造语法树时用到了比较高级的函数式编程技巧 - 大家慢慢理解
Fsharp参考案例(自选)
- Postfix/ 后缀式 运算 1 2 + 3 *
- Usql/ sql 语言语法解析
边栏推荐
- Upgrade Mysql to the latest version (mysql8.0.25)
- Markdown 实现文内链接跳转
- 直播回顾 | 云原生混部系统 Koordinator 架构详解(附完整PPT)
- Pipeline concept of graphic technology
- Review SGI STL secondary space configurator (internal storage pool) | notes for personal use
- WCF TCP protocol transmission
- Model effect optimization, try a variety of cross validation methods (system operation)
- Small sample fault diagnosis - attention mechanism code - Implementation of bigru code parsing
- 蓝桥杯_N 皇后问题
- 2022茶艺师(中级)上岗证题库及在线模拟考试
猜你喜欢

Search and recommend those things

Swift Extension ChainLayout(UI的链式布局)(源码)

2022年制冷与空调设备运行操作上岗证题库及模拟考试

jwt(json web token)

2021-03-11 COMP9021第八节课笔记

MAYA重新拓布

C language_ Love and hate between string and pointer

OC extension detects whether an app is installed on the mobile phone (source code)

Question 3 - MessageBox pop-up box, modify the default background color

5分钟,客服聊天处理技巧,炉火纯青
随机推荐
Application of JDBC in performance test
C语言_字符串与指针的爱恨情仇
QOpenGL显示点云文件
到底哪一首才是唐诗第一?
For a detailed explanation of flex:1, flex:1
Swift 基础 Swift才有的特性
Pat 1157: school anniversary
Getting started with ffmpeg
Unity culling related technologies
有关iframe锚点,锚点出现上下偏移,锚点出现页面显示问题.iframe的srcdoc问题
Final review and key points of software process and project management
对于flex:1的详细解释,flex:1
Introduction to software engineering - Chapter 2 - feasibility study
2022 tea artist (intermediate) work license question bank and online simulation examination
OC extension detects whether an app is installed on the mobile phone (source code)
软件过程与项目管理期末复习与重点
Four models of iPhone 13 series have been exposed, and indeed, they are 13 fragrant!
Interview tutorial - multi thread knowledge sorting
自动化测试的未来趋势
WPS的JS宏实现图片正文在同一段落的分离方法
