编译器设计02-前端概述

前端处理概述

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

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

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

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

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

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

词法分析概述

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

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

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

语法分析概述

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

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

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

语义分析概述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174667.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件工程期末复习(选择+填空+判断)

文章目录 软件工程期末复习一、 选择题 软件工程期末复习 一、 选择题 1.“软件危机”的表现不包括:(c) A、软件产品不能按期交付 B、用户对“已完成的”软件产品时常不满意 C、程序员越来越供不应求 D、软件项目难以管理,维护困…

东胜物流软件 SQL注入漏洞复现

0x01 产品简介 东胜物流软件是一款致力于为客户提供IT支撑的 SOP, 帮助客户大幅提高工作效率,降低各个环节潜在风险的物流软件。 0x02 漏洞概述 东胜物流软件 TCodeVoynoAdapter.aspx、/TruckMng/MsWlDriver/GetDataList、/MvcShipping/MsBaseInfo/Sav…

CSS3制作3D爱心动画

1、什么是CSS css,即层叠样式表的简称,是一种标记语言,有浏览器解释执行用来使页面变得更美观。 2、选择器 css3中新增了一些选择器,如下: 3、新样式 边框 css3新增了三个边框属性,分别是: bo…

linux之下安装 nacos

1 下载地址 也可使用在线下载wget https://github.com/alibaba/nacos/releases/download/1.4.6/nacos-server-1.4.6.tar.gzTags alibaba/nacos GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building cloud nativ…

android trace文件的抓取与查看方法

本地手机抓取trace 解压android trace文件的抓取与查看方法 找到config.pbtx文件,连接手机push进去 # push config.pbtx ,/data/local/tmp/为自定义push到的目录 adb push config.pbtx /data/local/tmp/ adb shell # 抓取trace, /data/loc…

pandas教程:Interfacing Between pandas and Model Code pandas与建模代码间的交互

文章目录 Chapter13 Introduction to Modeling Libraries in Python(Python中建模库的介绍)13.1 Interfacing Between pandas and Model Code(pandas与建模代码间的交互) Chapter13 Introduction to Modeling Libraries in Python…

【MyBatisPlus】通俗易懂 快速入门 详细教程

目录 学习目标 一、MyBatisPlus简介 1. 入门案例 问题导入 1.1 SpringBoot整合MyBatisPlus入门程序 ①:创建新模块,选择Spring初始化,并配置模块相关基础信息 ②:选择当前模块需要使用的技术集(仅保留JDBC&…

bodymovin:AE动画导出为JSONforMac/win中文版下载

对于动画制作爱好者和专业设计师来说,Adobe After Effects(AE)是一个强大的工具,可以创造出惊人的动画效果。然而,将这些动画导出为可交互的格式一直是一个挑战。现在,有了bodymovin,你可以轻松…

[原创][1]探究C#多线程开发细节-“Thread类的简单使用“

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

搜索百度可以直接生成代码拉

先看效果图: 使用示例: 比如我要搜索“JS取一个数在两个数更近”的方法,直接搜“JS取一个数在两个数更近”,点击百度一下,就会出现想要的代码,如上图。

基于OpenCV+YOLOv5实现车辆跟踪与计数(附源码)

导 读 本文主要介绍基于OpenCVYOLOv5实现车辆跟踪与计数的应用,并给出源码。 资源下载 基础代码和视频下载地址: https://github.com/freedomwebtech/win11vehiclecount main.py代码:​​​​​​​ import cv2import torchimport numpy as npfrom tr…

Kotlin学习之集合

原文链接 Kotlin Collections 现代的软件一般比较复杂,程序语言中的基本数据类型往往不能满足需要,除了基本的数据类型以外,还有对象的容器也非常的重要,比如线性容器(数组,列表和Set)和二维容…

【SA8295P 源码分析 (四)】134 - Android 侧 NFS Client 挂载 QNX NFS Server 目录不成功 问题排查方法

【SA8295P 源码分析】134 - Android 侧 NFS Client 挂载 QNX NFS Server 目录不成功 问题排查方法 一、QNX侧1. 检查镜像是否挂载成功:/mnt/nfs_shared_dir 目录2. 检查 /mnt/etc/exports 文件配置是否正确3. 检查 nfsd、rpcbind 两个服务程序是否在后台工作正常 二…

Arkts web组件的使用

访问在线网页时您需要在module.json5文件中申明网络访问权限:ohos.permission.INTERNET。 加载网页效果无法在预览器中查看,需要在模拟器或者真机中展示项目 Web组件的使用非常简单,只需要ArkTS文件中创建一个Web组件,传入两个参数…

C语言:输出所有“水仙花数”。“水仙花数”是指一个3位数,其各位数字的立方和等于该数本身,如153=1^3 +5^3+3^3

分析: 在主函数 main 中,程序首先定义四个整型变量 m、a、b 和 c,并用于计算和判断水仙花数。然后使用 printf 函数输出提示信息。 接下来,程序使用 for 循环结构,从 100 到 999 遍历所有三位数。对于每个遍历到的数 m…

什么是NoOps

过去几年,自动化一直在推动整个 IT 行业向前发展。通过自动化某些任务,开发团队可以提高其能力,而无需感受到雇用新团队成员的预算压力。自动化还保证了更高的效率,特别是在操作和维护方面。 传统的软件开发工作流程涉及开发团队…

CocosCreator 面试题(十八)Cocos Creator 图集打包有什么意义 ,我们一般在项目里面怎么规划

一、Cocos Creator 图集打包有什么意义 Cocos Creator是一款流行的游戏开发引擎,它提供了图集打包的功能。图集打包的主要目的是将游戏中使用的多个小图片(或者称为精灵)合并到一个大的图集中,以优化游戏的性能和资源管理。以下是…

Mac电脑数据库管理 Navicat Premium 15中文 for mac

Navicat Premium 15是一款强大的数据库管理和开发工具。它支持多种数据库类型,包括MySQL、MariaDB、Oracle、PostgreSQL等,可以帮助用户方便地管理和维护数据库。该软件提供了直观的用户界面和强大的功能,可以帮助用户快速创建、编辑和删除数…

ubuntu/vscode下的c/c++开发之-CMake语法与练习

Cmake学习 1 语法特性介绍 基本语法格式:指令(参数 1 参数 2...) 参数使用括弧括起参数之间使用空格或分号分开 指令是大小写无关的,参数和变量是大小写相关的 set(HELLO hello.cpp) add_executable(hello main.cpp hello.cpp) ADD_EXECUTABLE(hello ma…

2023大模型安全解决方案白皮书

今天分享的是大模型系列深度研究报告:《2023大模型安全解决方案白皮书》。 (报告出品方:百度安全) 报告共计:60页 前言 在当今迅速发展的数字化时代,人工智能技术正引领着科技创新的浪潮而其中的大模型…