编译原理 第〇章 通论

【C++/嵌入式梳理】大纲 C++嵌入式笔试面试集锦大纲介绍 阅读详情

转自:https://segmentfault.com/a/1190000011138941

首先明确一下参考书, 我们使用的是《编译原理》(第三版)陈意云 张昱 著 高教出版社.

从第一个 C 语言试验 "hello world" 我们就已经明白了如何写代码和运行代码. 我们打开编译器, 可能是亘古不变的 VC 6.0, 亦或是简洁友好的 dev C++. 不管怎样, 我们都明白这样的流程, 写代码->调试运行. 而我们又知道, 不管你的计算机是什么架构, 都不能直接执行 C 的代码. 在面向硬件的机器码和高级语言之间起到纽带作用的便是编译器.

从高级语言到机器语言

我们学习编译原理的目的就是要明白编译器是怎样将一个高级语言转变成 0/1 串的机器语言的. 整个流程如下图所示:

编译器工作流程简图

需要注意的是, 这个流程仅用来说明大致的工作内容与顺序,并不严谨. 其中前面三项往往被称为编译器的前端, 优化被称作中段, 而生成目标代码叫做编译器的后端.

简单的解释一下这个流程图. 首先是词法分析, 词法分析的工作在于区分代码中的单词与符号. 比如在 C 语言中, 标识符可以由空格断开区分. 如: "int var = 3;", 词法分析的任务便是识别出各个单词. 我们希望当词法分析器读入这一串字符串后可以告诉我们这个串中有几个"单词", "int", "var", "=" 以及 "3". 且他们分别是"类型名", "变量名", "操作符" 以及"数字". 往往这些信息以记号的形式存在, 即 "<TYPE, INT> <ID, "var"> <OP, EQ> <NUM, "3">".

拿到这些信息, 下一步便是语法分析. 语法分析检查拿到的记号流是否满足语法要求. 一般语法分析后,我们会得到语法树. 如"var_a = var_b * (var_c + var_d)", 根据语法分析我们得到这样的树:

语法树示例

然后便是语义分析, 这一步里编译器就会考虑类型匹配, 转换等问题.

优化过程中, 编译器会适当地对代码进行一些调整. 比如数据对齐, 减少依赖甚至是并行化. 最后一步生成目标代码, 就是编译器用前面准备好的信息生成最后的目标代码(机器码). 后两部分可能不是我们重点考虑的内容. 编译器的基本原理主要还是集中在前三个部分。

创建于 2017.9.12
Osinovsy

陈意云教授编译原理详解与实战 本文还有配套的精品资源,点击获取 简介:《编译原理》由陈意云教授编写,详细阐述了编程语言的编译过程,包括词法分析、语法分析、语义分析、中间代码生成、代码优化、目标码生成以及链接等核心步骤。这门课程不仅教授编译器的基本构造和工作流程,还可能探讨现代编译技术,使开发者深入理解编程语言原理,并提升编程和调试技能。 1. 编译原理概述 编译原理是一门深入研究计算机语... 阅读详情

相关推荐

编译原理(陈意云)

编译原理课件是由中国科学技术大学、计算机科学与技术学院教授陈意云主编的一部经典课件!

编译原理速通笔记

参考getianao的博客 引论 编译程序: 是一个语言翻译程序,它将源语言程序翻译成目标语言程序。 编译流程: 待预处理的源程序——(预处理)源程序——(编译)目标汇编程序——(汇编)可重定位的机器语言——(连接装入)可执行 编译程序(源程序到目标汇编)的6个阶段: 词法分析:识别单词,返回类别、值;错误处理 语法分析:单词序列分解成语法短语,构成程序 语义分析:是否符合语义规则 中间代码生...

HuiFeiDeTuoNiaoGZ的博客 505

STM32L452与FPGA通信翻车?手把手教你关闭I2C时钟延展避坑(附OVR错误解决方案)

本文深入解析STM32L452与FPGA在I2C通信中因时钟延展功能导致的常见问题,提供关闭I2C时钟延展的详细配置方法(NOSTRETCH模式),并针对可能出现的OVR错误给出Combined模式解决方案。通过实战案例和波形分析,帮助工程师快速排查和解决嵌入式系统中的I2C兼容性问题。

e3f4g5的博客 216

编译原理(核心速成)

编译原理(混子速成): 1.DFA、NFA 2.LL文法、LR文法:FIRST、FOLLOW

Edward2022的博客 1万+

用Zotero+B站Kimi,我如何把一篇顶会论文快速做成组会PPT(含完整提示词)

本文介绍如何利用Zotero和Kimi快速将顶会论文转化为组会PPT,提升学术汇报效率。通过Zotero的文献管理插件和Kimi的AI提炼技术,实现从论文阅读到PPT生成的全流程自动化,帮助研究者在90分钟内完成高质量汇报准备。

weixin_30955617的博客 502

解决Android UVCCamera stopPreview 报错 崩溃 闪退 问题

在使用libuvccamera库的UVCCamera时,经常在调用stopPreview关闭预览的时候,app直接崩溃闪退了,经过综合各种修改源码的方案,已解决这个问题,以下请参考: 首先找到android_usbfs.c,linux_usbfs.c两个原文件,在两个文件中都可以找到这段代码,按如下示例修改: 修改前: for (i = 0; i < num_urbs; i++) { if (urb == tpriv->iso_urbs[i]) { urb_idx = i + 1;

hanye2020的博客 3576

编译原理:flex与bison--从0到1完成一个编译器(sample语言)〇

编译原理:flex与bison–从0到1完成一个编译器(sample语言) 前言 本系列文章共三部分,记述了我完成编译器的过程,供后来的学弟学妹参考借鉴。 本项目是我的编译原理作业,文章是由实验报告整理而来的,重在阐述,如果没有编译原理的相关知识,还要结合一些教程来看。 本项目实现的编译器包括词法分析,语法分析,语义分析与中间代码生成,目标代码生成共四个阶段,能将sample语言翻译成可执行的汇编语言。使用flex与bison工具辅助,通过C语言实现。本人能力有限,项目有许多不足和值得改进的地方,也请读者

Yawning_Pants的博客 1560

fNIRS 公开数据集整理

关注“心仪脑”查看更多脑科学知识的分享。 关键词:数据整理、fNIRS 之前我们向大家推送了 Public Neuroscience Dataset 系列主题的第一期:《EEG公开数据集》,我们同时意识到大家对于神经科学公开数据集的需求。本期是该系列主题的第二期,我们在延续第一期初衷的基础上,整理了功能性近红外光谱(fNIRS)技术的公开数据集。 fNIRS 是一种非侵入性、便携且价格低廉的光学神经成像技术,它具有可观的空间和时间分辨率。因fNIRS技术问世较EEG晚了许多,所以应用此技术开展研究发.

psybrain的博客 4272

编译原理(1)—— 语法分析(自上而下)

整理编译原理笔记 编译原理和形式语言自动机关系很大,可以结合自动机的内容一起看 教材《程序设计语言 编译原理(第3版)》—— 陈火旺 等 个人理解,仅供参考,错误欢迎指出 一、语法分析器的功能 在词法分析识别出单词符号的基础上,分析判定程序的语法结构是否符合规则 ...

佚失的诗篇 1629

5G LDPC编码实战:从校验矩阵到Matlab代码实现(附完整源码)

本文深入解析5G NR标准中的LDPC编码工程实现,聚焦于从3GPP协议中的QC-LDPC校验矩阵到高效Matlab代码的转换。文章详细阐述了基础矩阵(BG1/BG2)选择、提升因子确定以及利用双对角结构的快速编码算法,并提供了完整的、可优化的Matlab源码,旨在帮助通信算法工程师和开发者快速构建5G LDPC编码仿真原型,为硬件实现奠定基础。

table的专栏 377

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

Android逆向进阶篇 Charles + Drony Vpn绕过代理检测方案 获取猫眼App数据

曾用名:极客柒 1853

Re: 从零开始开发64位操作系统内核 - 第〇章

本教程将使用C++和Rust语言完成一个基本的操作系统内核

指向BIOS的野指针 1544

【推荐100个unity插件】动画重定向,快速在不同角色间共享动画,共用非人形Humanoid(泛型generic)动画——Retarget Pro

Retarget Pro是一款高效的Unity动画重定向工具,可快速在不同角色间共享动画。主要特点包括:1分钟快速设置,支持编辑器和运行时重定向;适用于人形、动物、武器等各类角色;提供基础重定向、IK重定向和FPS专用重定向三种功能模块;通过Rig组件和骨架资产实现骨骼链匹配,支持批量处理。插件包含示例项目和预设资源,操作简便且效果优于Unity原生Humanoid系统,特别适合处理手指等精细动画。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 548

编译原理 第一章 词法分析

编译原理 第一章 词法分析 转自:https://segmentfault.com/a/1190000011139389 词法分析器的作用 词法分析器(scanner), 在第〇章我们已经说过它的作用: 识别所有标识符并对其标记属性信息. 这篇内容讲解这个过程是如何实现的. 首先, 先引入三个概念:串,单词与模式.串就是我们通常说的字符串, 是一个一维的逻辑结构, 按照某个...

Curtis’Blog 636

<IBM DB2>《DB2 官方监控脚本 2022版本》

DB2 监控脚本

Else 的博客 674

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

编译原理:flex与bison--从0到1完成一个编译器(sample语言)③

本系列文章共三部分,记述了我完成编译器的过程,供后来的学弟学妹参考借鉴。(时隔三年,我终于想起更新第二三部分了。本项目是我的编译原理作业,文章是由实验报告整理而来的,重在阐述,如果没有学习编译原理的相关知识,还要结合一些教程来看。本项目实现的编译器包括词法分析,语法分析,语义分析与中间代码生成,目标代码生成共四个阶段,能将sample语言翻译成可执行的汇编语言。使用flex与bison工具辅助,通过C语言实现。本人能力有限,项目有许多不足和值得改进的地方,也请读者多多指正。

Yawning_Pants的博客 1544

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

编译原理:flex与bison--从0到1完成一个编译器(sample语言)①

编译原理:flex与bison–从0到1完成一个编译器(sample语言) 文章目录前言一、Sample语言简介二、项目内容三、原理与实现过程1.词法分析2.步骤四、项目演示总结 前言 本系列文章共三部分,记述了我完成编译器的过程,供后来的学弟学妹参考借鉴。 本项目是我的编译原理作业,文章是由实验报告整理而来的,重在阐述,如果没有编译原理的相关知识,还要结合一些教程来看。 本项目实现的编译器包括词法分析,语法分析,语义分析与中间代码生成,目标代码生成共四个阶段,能将sample语言翻译成可执行的汇编语

Yawning_Pants的博客 6488

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

编译原理:flex与bison--从0到1完成一个编译器(sample语言)②

本系列文章共三部分,记述了我完成编译器的过程,供后来的学弟学妹参考借鉴。(时隔三年,我终于想起更新第二部分了。本项目是我的编译原理作业,文章是由实验报告整理而来的,重在阐述,如果没有学习编译原理的相关知识,还要结合一些教程来看。本项目实现的编译器包括词法分析,语法分析,语义分析与中间代码生成,目标代码生成共四个阶段,能将sample语言翻译成可执行的汇编语言。使用flex与bison工具辅助,通过C语言实现。本人能力有限,项目有许多不足和值得改进的地方,也请读者多多指正。

Yawning_Pants的博客 1276

编译原理 X - 练习题

编译原理 考前复习 - 练习题

qq_50918834的博客 1203

用正规式描述c语言标识符定义,编译原理 第一章 词法分析

词法分析器的作用词法分析器(scanner), 在第〇章我们已经说过它的作用: 识别所有标识符并对其标记属性信息. 这篇内容讲解这个过程是如何实现的.首先, 先引入三个概念: 串, 单词与模式. 串就是我们通常说的字符串, 是一个一维的逻辑结构, 按照某个特定顺序存储了一些符号; 单词就是符合某一模式的串; 那么什么是模式呢? 简单的说就是字符的形成规则. 比如在 C 中, 我们知道变量的名字由字...

weixin_35259353的博客 1792

一文带你速通CPT101计算机系统概念(含笔记下载链接)

快来看!西交利物浦CPT101课程精要笔记,全文6k字,带你速通西浦CPT101。

xxsjyjdw的博客 3364

我的优秀书籍阅读单

一个程序员的技术沉淀之路

weison_x的博客 377

银河系阅读指南

。。。

nameofcsdn的博客 3005

计算机系统架构 Linux(1-12)

介绍计算机系统架构的基本知识,包括计算机组成、发展历史、CPU、内存、硬盘、输入输出设备、GPU、声卡等各方面内容。介绍了程序运行原理和操作系统的综述,包括个人电脑操作系统、服务器操作系统以及对 Linux 系统的简述

CH0ico's Blog 1200
上一篇: 编译原理 第一章 词法分析
下一篇: 攻城狮都应当知道的——编译器的工作过程
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值