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

编译器设计02-前端概述

前端处理概述

前端处理:词法分析语法分析语义分析

前端处理犹如阅读英文文章,往往我们需要先理清文章中各个词的意思,这类似词法分析,得到“单词序列”;再梳理整篇文章的脉络,这类似语法分析,得到描述文章脉络的“抽象语法树”;再检查文章的议论是否逻辑正确、叙述是否前后连贯、抒情是否价值观一致,这类似语义分析,得到格式正确的“抽象语法树”。

前端处理的目标就是彻底理解源代码,分析源代码内容,完成词法分析,语法分析和语义分析,得到基本符合语言设计规范的“抽象语法树”。

词法分析 : 源代码 → 分析  单词序列 词法分析:源代码\xrightarrow{\ 分析\ }单词序列 词法分析:源代码 分析  单词序列

语法分析 : 单词序列 → 分析  抽象语法树 语法分析:单词序列\xrightarrow{\ 分析\ }抽象语法树 语法分析:单词序列 分析  抽象语法树

语义分析 : 抽象语法树 → 检查  抽象语法树 语义分析:抽象语法树\xrightarrow{\ 检查\ }抽象语法树 语义分析:抽象语法树 检查  抽象语法树

词法分析概述

高级语言源程序由一系列的句子构成,句子由单词按照一定的规则构成,而单词又由字符按照一定规则构成的。词法分析是编译基础,主要分析源程序中的字符流能否构成正确的单词,执行词法分析的程序称为词法分析程序或扫描器。

词法分析任务是:从左到右逐个字符扫描输入的源程序,按照构词规则,检查词法错误,识别出正确的单词,并输出单词的内部表示形式。如果识别过程中发现错误或无法识别的单词,则输出有关错误信息。

识别单词的目的是为了后续阶段的使用。因此为了简化后续阶段的工作,需要对每个单词(或单词类别)进行编码,这个编码称为种别码,又称token值。当识别出一个单词时,就将其种别码及单词自身的值一起输出,把作为字符串输入的源程序改造成单词记号换的中间形式(又称为token串),提交给语法分析程序使用。

语法分析概述

语法分析器的作用:根据词法分析器提供的单词流,为语法正确的输入构造抽象语法树;检查输入中的语法(可能包括词法)错误,并调用出错处理器进行适当处理。

许多编译器,特别是由自动生成工具构造的编译器,往往其前端的中心部件就是语法分析器。

源程序中可能出现的错误
词法错误:指非法字符或拼写错关键字、标识符等
语法错误:指语法结构出错,如少分号、括号不匹配、begin/end不配对等
静态语义错误:如类型不一致、参数不匹配等
动态语义错误(逻辑错误):如死循环、变量为零时作除数等

语义分析概述

语义分析是编译过程的一个逻辑阶段, 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。语义分析是审查源程序有无语义错误,为代码生成阶段收集类型信息。比如语义分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象,当不符合语言规范时,编译程序应报告错误,如有的编译程序要对实数用作数组下标的情况报告错误。

相关文章:

  • Android JNI 异常定位(2)—— addr2line
  • springboot 使用脚本进行启动部署
  • 7-2 输出大写英文字母
  • 园区智能配电系统(电力智能监控系统)
  • 算法基础之KMP算法
  • Jmeter 压测保姆级入门教程
  • Linux常用命令——rm 命令
  • python实现自动刷平台学时
  • 怎么给数据库某个字段建立一个前缀索引
  • 如何在Ubuntu系统上安装Redis
  • 97.STL-查找算法 find
  • 什么是计算机病毒?
  • axios 请求合集
  • 智能优化算法应用:基于回溯搜索算法无线传感器网络(WSN)覆盖优化 - 附代码
  • VUE语法-ref和reactive响应式数据引用
  • 时间复杂度分析经典问题——最大子序列和
  • [nginx文档翻译系列] 控制nginx
  • CentOS7 安装JDK
  • ES6简单总结(搭配简单的讲解和小案例)
  • Golang-长连接-状态推送
  • HTML5新特性总结
  • javascript面向对象之创建对象
  • Webpack 4 学习01(基础配置)
  • 力扣(LeetCode)56
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 买一台 iPhone X,还是创建一家未来的独角兽?
  • 时间复杂度与空间复杂度分析
  • 使用 QuickBI 搭建酷炫可视化分析
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 算法-插入排序
  • 优秀架构师必须掌握的架构思维
  • Java总结 - String - 这篇请使劲喷我
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • zabbix3.2监控linux磁盘IO
  • ​2021半年盘点,不想你错过的重磅新书
  • ​Python 3 新特性:类型注解
  • ​人工智能书单(数学基础篇)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $.each()与$(selector).each()
  • (12)目标检测_SSD基于pytorch搭建代码
  • (4) PIVOT 和 UPIVOT 的使用
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (数据结构)顺序表的定义
  • (四)Linux Shell编程——输入输出重定向
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)VirtualBox安装增强功能
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转载)(官方)UE4--图像编程----着色器开发
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)