news 2026/8/17 12:10:30

HNU 编译系统 作业3

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HNU 编译系统 作业3

题目1

题干

对以上上下文无关文法与对应的串:

  • 给出这个串的一个最左推导
  • 给出这个串的一个最右推导
  • 给出这个串的一棵语法分析树

(1)对于文法S -> + S S | * S S | a和输入字符串+ * a a a
最左推导:

S -> + S S -> + * S S S -> + * a S S -> + * a a S -> + * a a a

最右推导:

S -> + S S -> + S a -> + * S S a -> + * S a a -> + * a a a

语法分析树:

(2)对于文法S -> S ( S ) S | ε和输入字符串( ( ) ( ) )
最左推导:

S -> S ( S ) S -> ε ( S ) S -> ( S ) S -> ( S ( S ) S ) S -> ( ε ( S ) S ) S -> ( ( S ) S ) S -> ( ( ε ) S ) S -> ( ( ) S ) S -> ( ( ) S ( S ) S ) S -> ( ( ) ε ( S ) S ) S -> ( ( ) ( S ) S ) S -> ( ( ) ( ε ) S ) S -> ( ( ) ( ) S ) S -> ( ( ) ( ) ε ) S -> ( ( ) ( ) ) S -> ( ( ) ( ) ) ε -> ( ( ) ( ) )

最右推导:

S -> S ( S ) S -> S ( S ) ε -> S ( S ) -> S ( S ( S ) S ) -> S ( S ( S ) ε ) -> S ( S ( S ) ) -> S ( S ( ε ) ) -> S ( S ( ) ) -> S ( S ( S ) S ( ) ) -> S ( S ( S ) ε ( ) ) -> S ( S ( S ) ( ) ) -> S ( S ( ε ) ( ) ) -> S ( S ( ) ( ) ) -> S ( ε ( ) ( ) ) -> S ( ( ) ( ) ) -> ε ( ( ) ( ) ) -> ( ( ) ( ) )

语法分析树:

题目2

题干

为题目1中的每一个文法设计一个预测分析器。你可能先要对文法进行提取左公因子或消除左递归的操作。

对于文法S -> + S S | * S S | a

parse_S() { // S -> + S S | * S S | a token = nextToken(); switch(token) if (token == "+") { move token; parse_S(); parse_S(); } if (token == "*") { move token; parse_S(); parse_S(); } if (token == "a") { move token; } else error("..."); }

对于文法S -> S ( S ) S | ε,先消除左递归得到新文法:

S' -> ( S ) S S' | ε S -> S'

再写递归下降的预测分析器:

parse_S() { // S -> S' token = nextToken(); switch(token) if (token == "(") { parse_S_prime(); } else if (token in [$, (, )]) { // ε } else error("..."); } parse_S_prime() { // S' -> ( S ) S S' | ε token = nextToken(); switch(token) if (token == "(") { move token; parse_S(); move token; parse_S(); parse_S_prime(); } else if (token in [$, (, )]) { // ε } else error("..."); }

题目3

题干

计算题目1中的各个文法的FIRST和FOLLOW集合。你可能先要对文法进行提取左公因子或消除左递归的操作。

(1)对于文法S -> + S S | * S S | a
该文法没有左公因子和左递归。

(2)对于文法S -> S ( S ) S | ε
对该文法消除左递归后得到新文法:

S' -> ( S ) S S' | ε S -> S'

题目4

判断题目1中的文法是否为LL(1)文法,如果是则填写其LL(1)语法分析表。

(1)对于文法S -> + S S | * S S | a
该文法是LL(1)文法,语法分析表如下:

(2)对于文法S -> S ( S ) S | ε
该文法不是LL(1)文法,因为存在左递归。

题目5

为下面的语言设计文法。
(1)所有由0和1组成的并且每个0之后至少跟着一个1的串的集合。
(2)所有由0和1组成的回文(palindrome)的集合,也就是从前面和从后面读结果都相同的串的集合。

(1)

S -> 0 1 S | 1 S | ε

(2)

S -> 0 S 0 | 1 S 1 | 0 | 1 | ε

题目7

(1)对于以上两个文法,分别画出其LR(0)项集的状态转换图(即DFA)。
(2)判断它们是否为LR(0)文法,是否为SLR(1)文法,给出理由。
(3)如果是LR(0)文法或SLR(1)文法,填出其LR语法分析表。

(1)对于文法S -> S S + | S S * | a,得到增广文法

0 : S' -> S $ 1 : S -> S S + 2 : | S S * 3 : | a

对于文法S -> a S a | a a,得到增广文法

0 : S' -> S $ 1 : S -> a S a 2 : | a a

(2)对于文法S -> S S + | S S * | a
LR(0)分析表:

是LR(0)文法,因为LR(0)分析表中无冲突。
SLR(1)分析表:

是SLR(1)文法,因为SLR(1)分析表中无冲突。
对于文法S -> a S a | a a
LR(0)分析表:

不是LR(0)文法,因为LR(0)分析表中,状态4输入符号为a时有移进-规约冲突。
SLR(1)分析表:

不是SLR(1)文法,因为SLR(1)分析表中,状态4输入符号为a时仍有移进-规约冲突。
(3)见(2)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/16 6:51:02

青少年运动员慢性踝关节不稳的四周踝关节康复计划

严正声明:本博客内容仅为学习使用,不具备任何医学建议或者参考价值。如有不适,请遵医嘱。本博客所转载之内容,不能作为正式的医学参考,仅供学习 青少年运动员慢性踝关节不稳的四周踝关节康复计划 Four-Week Ankle-Reh…

作者头像 李华
网站建设 2026/8/17 6:05:17

vue基于Springboot框架的新农村自建房改造管理系统

目录已开发项目效果实现截图开发技术系统开发工具:核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式&…

作者头像 李华
网站建设 2026/8/17 22:23:31

基于C技术与SOCKET网络通信技术的局域网聊天系统

**# 基于C技术与SOCKET网络通信技术的局域网聊天系统 第一章 系统概述 在企业办公、校园协作等局域网场景中,传统即时通信工具依赖公网服务器,存在数据隐私泄露风险与网络延迟问题,而基于C技术与Socket网络通信的局域网聊天系统,通…

作者头像 李华
网站建设 2026/8/17 10:37:00

LobeChat实时流式输出实现原理剖析

LobeChat 实时流式输出实现原理剖析 在构建现代 AI 聊天应用的今天,用户早已不再满足于“发送问题、等待答案”的传统交互模式。当大语言模型(LLM)开始进入千家万户,用户体验的边界也被不断拉高——人们期望看到文字像人类打字一…

作者头像 李华
网站建设 2026/8/16 5:56:51

人人都在谈大模型,但90%的企业AI转型,都死在了数据这一关

从CEO到一线员工,几乎所有人都在热烈地讨论着大模型的最新进展和各种眼花缭乱的AI应用。我们仿佛进入了一个模型为王的时代,似乎只要接入最强的模型,就能解决所有问题。但现实是残酷的。 为什么很多企业AI项目总是做不出来? 我们也…

作者头像 李华
网站建设 2026/8/18 5:43:03

机器学习--线性回归

1、线性回归定义线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。相关关系:包含因果关系和平行关系因果关系:回归分析【原因引起结果,需要明确自变量和因变量平行关系:相关分析【无因果关系&#xf…

作者头像 李华