当前位置: 首页 > article >正文

【编译原理】总结

核心

闭包,正则闭包

产生式(规则)

文法 G[S]=(V_{N}V_{T},P,S)      一组规则的集合

V_{N}:非终结符

V_{T}:终结符

P:产生式

S:开始符号

推导

归约

规范(最右)推导

规范(最左)归约

句型

句子

语言

仅含终结符号的句型是一个句子

语言是所有句子的集合

短语

简单(直接)短语

句柄

任意句型的最左简单(直接)短语为句柄

根据语法树,短语--子树,简单短语----只有父子两代的子树

正则文法与状态转换图

右线性文法

左线性文法(归约)

正规式

DFA

M=(S,\sum,f,S0,F)

S0:唯一的初始状态

f:从S\times \sum到S的单值部分映射

F:终止状态集合

NFA

M=(S,\sum,f,S0,F)

S0:非空的初始状态集

f:从S\times \sum^{*}2^{S}的子集的映像

正规式R与NFA

NFA->正规式

确定的自上而下分析

LL(1)文法的条件

  • 文法不含左递归
  • 对文法中每个非终结符的各个产生式的候选首符号集两两不相交
  • 对文法中每一个非终结符,若存在某个候选首符号集包含\varepsilon,则FIRST(A)\cap FOLLOW(A)=\Phi

消除左递归

(1)直接左递归

\textbf{P}\rightarrow \textbf{P}\alpha |\beta \\ P\rightarrow \beta \textbf{P'} \\ \textbf{P'} \rightarrow \alpha \textbf{P'} | \varepsilon

(2)间接左递归

消除文法中全部左递归算法(前提:文法不含回路)

  • 把文法中非终结符,按某种顺序进行排列(顺序任意)
  • 对每个非终结符用排在它前面的其他非终结符的产生式表示出来,并消除产生式中的左递归
  • 化简所得文法,即去掉多余产生式

FISRT集

FOLLOW集

根据所给语言,构造文法

构造一右线性文法,与如下文法等价:先写语言,状态转换图,右线性文法

NFA->DFA   子集构造法

\varepsilon -closure(I)                 move(I,\alpha )

I_{\alpha }=\varepsilon -closure(move(I,\alpha ))

NFA确定化

DFA最小化        划分

正规式R与NFA(构造正规式R的DFA)

消除直接左递归

\textbf{P}\rightarrow \textbf{P}\alpha |\beta \\ P\rightarrow \beta \textbf{P'} \\ \textbf{P'} \rightarrow \alpha \textbf{P'} | \varepsilon

基本知识点

【编译原理】一二章-CSDN博客

【编译原理】第三章 词法分析-CSDN博客

【编译原理】 第四章 自上而下语法分析-CSDN博客

【编译原理】第五章 自下而上语法分析-CSDN博客

课后题

【编译原理】第四章 习题-CSDN博客

【编译原理】第三章 习题_(1) {0,1}上的含有子串010的所有串;-CSDN博客

练习

求FIRST集、FOLLOW集,判断是否为LL(1)文法,构造LL(1)分析表

FIRST集:

E: {'(', 'i'}

E': {+, -, ε}

T: {'(', 'i'}

T': {'*', '/', ε}

F: {'(', 'i'}

A: {+, -}

M: {*, /}

FOLLOW集:

E: {$, )}

E': {$, )}

T: {+, -, $, )}

T': {+, -, $, )}

F: {*, /, +, -, $, )}

A: {'(', 'i'}

M: {'(', 'i'}

该文法是LL(1)文法,因为所有产生式的FIRST集不相交,且对于可以推导出ε的产生式,其FIRST和FOLLOW集无交集

非终结符+-*/()i$
EE→TE'E→TE'
E'E'→ATE'E'→ATE'E'→εE'→ε
TT→FT'T→FT'
T'T'→εT'→εT'→MFT'T'→MFT'T'→εT'→ε
FF→(E)F→i
AA→+A→-
MM→*M→/

LL(1)分析器是一种自顶向下的语法分析器,使用一个分析栈和输入缓冲区来进行分析。其工作原理如下:

1. 初始化时,栈底放置结束符$,然后将开始符号压入栈顶。输入缓冲区存放待分析的字符串,末尾加上$。

2. 不断从栈顶取出符号X:

a. 如果X是终结符,检查是否与当前输入符号匹配。如果匹配,弹出X并消耗输入符号;否则报错。

b. 如果X是非终结符,查找分析表M[X, a](a是当前输入符号),若表中有产生式X→α,将X弹出,将α逆序压入栈中;若表中无条目,报错。

3. 重复步骤2,直到栈中只剩下$,输入缓冲区也只剩下$,此时接受输入字符串;否则报错。

LL(1)分析器通过预测产生式来展开非终结符,每一步都根据当前栈顶符号和输入符号选择正确的产生式,因此要求文法满足LL(1)条件,即分析表每个条目至多有一个产生式,避免冲突。

构造正规式R的DFA

NFA确定化

DFA最小化

消除左递归

习题总结

由文法开始符号经0步或多步推导产生的文法符号序列是(句型)

编译原理通常经历(词法分析)、(语法分析)、语义分析和中间代码生成、(优化)、(目标代码生成)等几个阶段;其中第一个阶段是以(源程序)为输入,(单词符号)为输出;最后一个阶段是以(中间代码)为输入,(机器语言程序或汇编语言程序)为输出。同时(表格管理)和(出错管理)贯穿编译器的各个阶段

解释器与编译器的主要区别是:(编译程序生成目标代码,解释程序不生成目标代码)

高级语言到低级语言的翻译过程称为(编译)。汇编语言到机器语言的翻译过程称为(汇编)

1.正规表达式(\varepsilon |a|b)^{2}表示的集合是()

A.\left \{ \varepsilon ,ab,ba,aa,bb \right \}

B.\left \{ ab,ba,aa,bb \right \}

C.\left \{ a,b,ab,aa,ba,bb \right \}

D.\left \{ \varepsilon ,a,b,aa,bb,ab,ba \right \}

D

\left \{ \varepsilon ,a,b \right \} \left \{ \varepsilon ,a,b \right \}

\left \{ \varepsilon ,a,b,aa,bb,ab,ba \right \}

2.分析树的内部结点仅由()组成

A.开始符号和非终结符号

B.终结符号和非终结符号

C.非终结符号

D.终结符号

C

3.文法

S\rightarrow (L)|a \\ L\rightarrow L,S|S

的终结符号是()

A.S

B.S L

C.a,()

D.a,()|

C

4.NFA M所识别的语言是()

A.0型语言

B.上下文有关语言

C.上下文无关语言

D.正规语言

D

5.同正规式a*b*等价的文法是()

A.S\rightarrow aS|bS|\varepsilon

B.S\rightarrow aSb|\varepsilon

C.S\rightarrow aS|Sb|\varepsilon

D.S\rightarrow abS|\varepsilon

C

L(G)={a^{m}b^{n},a\geq 0,b\geq 0}

D

相关文章:

【编译原理】总结

核心 闭包,正则闭包 产生式(规则) 文法 G[S](,,P,S) 一组规则的集合 :非终结符 :终结符 P:产生式 S:开始符号 推导 归约 规范(最右&#xff…...

docker创建一个centOS容器安装软件(以宝塔为例)的详细步骤

备忘:后续偶尔忘记了docker虚拟机与宿主机的端口映射关系,来这里查看即可: docker run -d \ --name baota \ --privilegedtrue \ -p 8888:8888 \ -p 8880:80 \ -p 8443:443 \ -p 8820:20 \ -p 8821:21 \ -v /home/www:/www/wwwroot \ centos…...

OpenVLA:开源的视觉-语言-动作模型

1. 简介 让我们先来介绍一下什么是OpenVLA,在这里: https://openvla.github.io/ 可以看到他们的论文、数据、模型。 OpenVLA 是一个拥有 70亿参数的开源 **视觉-语言-动作(VLA)**模型。它是在 Open X-Embodiment 数据集 中的 97万…...

Matlab/Simulink的一些功能用法笔记(4)

水一篇帖子 01--MATLAB工作区的保护眼睛颜色设置 默认的工作区颜色为白色 在网上可以搜索一些保护眼睛的RGB颜色参数设置 在MATLAB中按如下设置: ①点击预设 ②点击颜色,点击背景色的三角标符号 ③点击更多颜色,找到RGB选项 ④填写颜色参数…...

【比赛真题解析】混合可乐

这次给大家分享一道比赛题:混合可乐。 洛谷链接:U561549 混合可乐 【题目描述】 Jimmy 最近沉迷于可乐中无法自拔。 为了调配出他心目中最完美的可乐,Jimmy买来了三瓶不同品牌的可乐,然后立马喝掉了一些(他实在是忍不住了),所以 第一瓶可口可乐最大容量为 a 升,剩余 …...

Elasticsearch:我们如何在全球范围内实现支付基础设施的现代化?

作者:来自 Elastic Kelly Manrique SWIFT 和 Elastic 如何应对基础设施复杂性、误报问题以及日益增长的合规要求。 金融服务公司在全球范围内管理实时支付方面面临前所未有的挑战。SWIFT(Society for Worldwide Interbank Financial Telecommunication -…...

matlab介绍while函数

MATLAB 中的 while 语句介绍 在 MATLAB 中,while 语句是一种循环结构,用于在满足特定条件时反复执行一段代码块。与 for 循环不同,while 循环的执行次数是动态的,取决于循环条件是否为真。 语法 while condition% 循环体代码 e…...

如何解决 PowerShell 显示 “此系统上禁用了脚本运行” 的问题

在 Windows 11 或 10 的 PowerShell 中运行脚本时,你可能会遇到一个错误,提示系统上禁用了脚本运行。这是一种安全功能,而不是系统问题,旨在防止可能有害的脚本自动运行。然而,如果你需要运行脚本来完成某些任务,或者你在系统上做了软件开发或测试的环境,那么你需要在 P…...

深入浅出之STL源码分析4_类模版

1.引言 我在上面的文章中讲解了vector的基本操作,然后提出了几个问题。 STL之vector基本操作-CSDN博客 1.刚才我提到了我的编译器版本是g 11.4.0,而我们要讲解的是STL(标准模板库),那么二者之间的关系是什么&#x…...

探索科技的前沿动态:科技爱好者周刊

探索科技的前沿动态:科技爱好者周刊 在信息爆炸的时代,我们每时每刻都被新技术、新理念包围。而如何在这纷繁复杂的信息中找到对自己有价值的内容,成了一大挑战。今天,我们要介绍的是一个宝贵的资源——科技爱好者周刊,它致力于为科技爱好者提供优质的科技资讯,每周五发…...

初学者入门指南:什么是网络拓扑结构?

初学者入门指南:什么是网络拓扑结构? 在构建或学习计算机网络时,一个绕不开的核心概念便是“网络拓扑结构”(Network Topology)。它决定了网络中各个设备如何连接、通信以及如何扩展。理解网络拓扑不仅有助于我们更清…...

在 Vue 3 中实现刮刮乐抽奖

🎉 在 Vue 3 中实现刮刮乐抽奖 当项目中需要做一些活动互动页时,需要实现刮刮乐,请看如下效果: 这里感谢github用户Choicc分享的组件,具体可点击传送门查看 1. 引入组件 将/src/components下ScratchCard.vue复制到自…...

Satori:元动作 + 内建搜索机制,让大模型实现超级推理能力

Satori:元动作 内建搜索机制,让大模型实现超级推理能力 论文大纲一、背景:LLM 推理增强的三类方法1. 基于大规模监督微调(SFT)的推理增强2. 借助外部机制在推理时进行搜索 (RLHF / 多模型 / 工具)3. 现有局限性总结 二…...

SDC命令详解:使用all_outputs命令进行查询

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html all_outputs命令用于创建一个输出端口对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。 Synopsys:设计对象https://chenzhang.blog.csdn…...

printf调试时候正常,运行时打印不出来

问题是在添加了 printf 功能后,程序独立运行时无法正常打印输出,而调试模式下正常。这表明问题可能与 printf 的重定向实现、标准库配置、或编译器相关设置有关。 解决: 原来是使用 Keil/IAR,printf可能需要启用 MicroLIB 或正确…...

解决 TimeoutError: [WinError 10060] 在 FramePack项目中连接 Hugging Face 超时的问题

#工作记录 以下是针对 TimeoutError: [WinError 10060] 的完整排查方案,适用于 FramePack项目中。 (一般该错误的发生原因请重点排查Hugging Face模型仓库受限需要登录的情形) FramePack项目参考资料 FramePack部署(从PyCharm解…...

分布式-Redis分布式锁

Redis实现分布式锁优点 (1)Redis有很高的性能; (2)Redis命令对此支持较好,实现起来比较方便 实现思路 (1)获取锁的时候,使用setnx加锁,并使用expire命令为锁…...

UniRepLknet助力YOLOv8:高效特征提取与目标检测性能优化

文章目录 一、引言二、UniRepLknet 的框架原理(一)架构概述(二)架构优势 三、UniRepLknet 在 YOLOv8 中的集成(一)集成方法(二)代码实例 四、实验与对比(一)对…...

自研时序大模型讲解(4月29日)直播回顾

4 月 29 日,清华团队揭秘:时序大模型如何让数据“活”起来线上直播圆满结束。清华大学软件学院博士生,IoTDB 原生机器学习引擎 AINode 研发同学刘雍在线上面向数千人次的时序数据分析人员与 AI 大模型行业关注者,就时序大模型的发…...

The Action Replay Process

Preface A commonly used inequality − x > ln ⁡ ( 1 − x ) , 0 < x < 1 -x > \ln(1 - x), \quad 0 < x < 1 −x>ln(1−x),0<x<1 Proof: Let f ( x ) ln ⁡ ( 1 − x ) x f(x) \ln(1 - x) x f(x)ln(1−x)x, for 0 < x < 1 0 < …...

k8s之ingress解释以及k8s创建业务的流程定义

matchLabels ingress Ingress 是反向代理规则&#xff0c;用来规定 HTTP/S 请求应该被转发到哪个 Service 上&#xff0c;比如根据请求中不同的 Host 和 url 路径让请求落到不同的 Service 上。 Ingress Controller 就是一个反向代理程序&#xff0c;它负责解析 Ingress 的反向…...

LVGL对象的盒子模型和样式

文章目录 &#x1f9f1; LVGL 对象盒子模型结构&#x1f50d; 组成部分说明&#x1f3ae; 示例代码&#x1f4cc; 总结一句话 &#x1f9f1; 一、样式的本质&#xff1a;lv_style_t 对象&#x1f3a8; 二、样式应用的方式&#x1f9e9; 三、样式属性分类&#xff08;核心&#…...

从0开始学习大模型--Day05--理解prompt工程

提示词工程原理 N-gram&#xff1a;通过统计&#xff0c;计算N个词共同出现的概率&#xff0c;从而预测下一个词是什么。 深度学习模型&#xff1a;有多层神经网络组成&#xff0c;可以自动从数据中学习特征&#xff0c;让模型通过不断地自我学习不断成长&#xff0c;直到模型…...

计算机视觉——基于树莓派的YOLO11模型优化与实时目标检测、跟踪及计数的实践

概述 设想一下&#xff0c;你在多地拥有多个仓库&#xff0c;要同时监控每个仓库的实时状况&#xff0c;这对于时间和精力而言&#xff0c;都构成了一项艰巨挑战。从成本和可靠性的层面考量&#xff0c;大规模部署计算设备也并非可行之策。一方面&#xff0c;大量计算设备的购…...

【计算机视觉】OpenCV项目实战:OpenCV_Position 项目深度解析:相机定位技术

OpenCV_Position 项目深度解析&#xff1a;基于 OpenCV 的相机定位技术 一、项目概述二、技术原理&#xff08;一&#xff09;单应性矩阵&#xff08;Homography&#xff09;&#xff08;二&#xff09;算法步骤&#xff08;三&#xff09;相机内参矩阵 三、项目实战运行&#…...

LAMMPS分子动力学基于周期扰动法的黏度计算

关键词&#xff1a;黏度,周期扰动法&#xff0c;SPC/E水分子&#xff0c;分子动力学&#xff0c;lammps 目前分子动力学计算黏度主要有以下方法&#xff1a;&#xff08;1&#xff09;基于 Green - Kubo 关系的方法。从微观角度出发&#xff0c;利用压力张量自相关函数积分计算…...

unity通过transform找子物体只能找子级

unity通过transform找子物体只能找子级&#xff0c;孙级以及更低级别都找不到&#xff0c;只能找到自己的下一级 如果要获取孙级以下的物体&#xff0c;最快的方法还是直接public挂载...

ThinkPad T440P如何从U盘安装Ubuntu24.04系统

首先制作一个安装 U 盘。我使用的工具是 Rufus &#xff0c;它的官网是 rufus.ie &#xff0c;去下载最新版就可以了。直接打开这个工具&#xff0c;选择自己从ubuntu官网下载Get Ubuntu | Download | Ubuntu的iso镜像制作U盘安装包即可。 其次安装之前&#xff0c;还要对 Thi…...

PostgreSQL给新用户授权select角色

✅ 切换到你的数据库并以超级用户登录&#xff08;例如 postgres&#xff09;&#xff1a; admin#localhost: ~$ psql -U postgres -d lily✅ 创建登录的账号机密吗 lily> CREATE USER readonly_user WITH PASSWORD xxxxxxxxxxx; ✅ 确认你授予了这个表的读取权限&#xf…...

嵌入式开发学习(阶段二 C语言基础)

C语言&#xff1a;第05天笔记 内容提要 分支结构 条件判断用if语句实现分支结构用switch语句实现分支结构 分支结构 条件判断 条件判断&#xff1a;根据某个条件成立与否&#xff0c;决定是否执行指定的操作。 条件判断的结果是逻辑值&#xff0c;也就是布尔类型值&#…...