编译原理与技术(二)——词法分析(一)正则表达式

一、词法分析的概貌

一个程序,在我们看来往往是像下图这样的。

实际上,上面的程序本质上就是一个字符串,所以,它等价于下面这样的。

 

上面的字符串(字符流) ,就是编译器接收到的程序的形式。

所以,编译器首先要对字符流进行断句,即将输入字符串识别为有意义的子串,删去注释和无意义的换行符等字符。有意义的子串又叫词法单元(token)

从程序字符流中获取词法单元集合的过程就是词法分析。

二、词法单元

词法单元(token)由一个记号名和一个可选的属性值(可为空)组成。即

token = <token_name, attribute_value>

属性记录词法单元的附加属性,具体有哪些附加属性,则要看编译器的设计者如何设计。

词法单元保存在符号表(Symbol table)中,以便编译的各个阶段取用。

例如:

有关词法单元的关键术语如下图所示。

举个例子。

三、正则表达式 (Regular Expression, RE)

(一)初识正则表达式

如何识别(匹配)词法单元呢?

我们可以考虑上面图中的模式的非形式描述,但显然在计算机中这是根本不可能的。

我们需要形式化地来设计模式,而这个模式就是正则表达式

正则表达式是一个文本模式,使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。

比如匹配正整数的正则表达式可以如下设计:

上图中的*表示闭包运算(某字符零次或多次出现),|表示选择运算符。

该正则表达式匹配正整数123的过程可如下表示。

 

匹配会从开始状态出发,不同的箭头代表不同的路径,能否走这条路径的条件是当前字符是否等于该路径上的字符(即是否匹配),终点是接受状态用一对同心圆表示

当一个词法单元能够通过上面过程到达接受状态,就说明:该词法单元可被该正则表达式匹配

有关正则表达式的详细介绍,可参考下面的链接:

正则表达式 – 教程 | 菜鸟教程 (runoob.com)

而上图中的箭头与圆圈就组成了有限自动机(Finite Automata)

所以,词法单元被某正则表达式所匹配,就等价于该词法单元被该正则表达式对应的有限自动机匹配。

(二)正则表达式的关键术语与概念

(三)正则表达式定义了语言 

举个例子。

参考资料:

 [1]USTC 编译原理和技术 2023 (ustc-compiler-principles.github.io) 

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

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

相关文章

wins 安装 tensorflow keras

1.python版本 python版本3.12&#xff0c;安装tensorflow会报错&#xff1a; 经过多次实验&#xff0c;使用的python版本是3.9.0 2.安装tensorflow a. pip install --trusted-host http://mirrors.aliyun.com/pypi/simple/ tensorflow2.6.0 速度有点慢&#xff0c;半个多小…

《爬虫职海录》卷二 • 爬在广州

HI&#xff0c;朋友们好&#xff0c;「爬虫职海录」第二期更新啦&#xff01; 本栏目的内容方向会以爬虫相关的“岗位分析”和“职场访谈”为主&#xff0c;方便大家了解一下当下的市场行情。 本栏目持续更新&#xff0c;暂定收集国内主要城市的爬虫岗位相关招聘信息&#xf…

GPT-1, GPT-2, GPT-3, GPT-3.5, GPT-4论文内容解读

目录 1 ChatGPT概述1.1 what is chatGPT1.2 How does ChatGPT work1.3 The applications of ChatGPT1.3 The limitations of ChatGPT 2 算法原理2.1 GPT-12.1.1 Unsupervised pre-training2.1.2 Supervised fine-tuning2.1.3 语料2.1.4 分析 2.2 GPT-22.3 GPT-32.4 InstructGPT…

CSS:三列布局

三列布局是指左右两列定宽&#xff0c;中间自适应。最终效果如下&#xff1a; HTML&#xff1a; <div class"container"><div class"left"></div><div class"center"></div><div class"right">…

Redis 命令大全

文章目录 启动与连接Key&#xff08;键&#xff09;相关命令String&#xff08;字符串&#xff09;Hash&#xff08;哈希&#xff09;List&#xff08;列表&#xff09;Set&#xff08;集合&#xff09;Sorted Set&#xff08;有序集合&#xff09;其他常见命令HyperLogLog&…

亚信安慧AntDB推动数据库自主可控

亚信安慧AntDB正致力于验证数据库软硬件全自主可控的可行性&#xff0c;并将其应用于运营商核心的交易场景&#xff0c;以替代国外商业解决方案。为了实现这一目标&#xff0c;亚信安慧AntDB的研发团队不断进行技术创新和实践探索。 该数据库以自主研发的技术为基础&#xff0…

【证书管理】实验报告

证书管理实验 【实验环境】 ISES客户端 【实验步骤】 查看证书 查看证书详细信息 选择任意证书状态&#xff0c;在下方“证书列表”中出现符合要求的所有证书。在“证书列表”中点击要查看证书&#xff0c;在右侧“证书详细信息”栏出现被选证书信息。 上述操作如图1.2.…

在 CentOS 7上使用 Apache 和 mod_wsgi 部署 Django 应用的方法

简介 Django 是一个强大的 Web 框架&#xff0c;可以帮助您快速启动 Python 应用程序或网站。Django 包括一个简化的开发服务器&#xff0c;用于在本地测试代码&#xff0c;但对于任何与生产相关的事情&#xff0c;都需要一个更安全和功能强大的 Web 服务器。 在本指南中&…

R语言绘图教程 | 双侧条形图绘制教程

写在前面 双侧条形图在我们的文章中也是比较常见的,那么这样的图形是如何绘制的呢? 以及它使用的数据类型是什么呢? 这些都是我们在绘制图形前需要掌握的,至少我们知道绘图的数据集如何准备,这样才踏出第一步。 今天的教程,我们会从数据的准备,以及数据如何整理,以及…

空气质量预测 | Matlab实现基于SVR支持向量机回归的空气质量预测模型

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 政府机构使用空气质量指数 (AQI) 向公众传达当前空气污染程度或预测空气污染程度。 随着 AQI 的上升,公共卫生风险也会增加。 不同国家有自己的空气质量指数,对应不同国家的空气质量标准。 基于支持向量机(Su…

个体诊所门诊电子处方开单管理系统软件,配方模板病历模板设置一键导入操作教程

个体诊所门诊电子处方开单管理系统软件&#xff0c;配方模板病历模板设置一键导入操作教程 一、前言 以下操作教程以 佳易王诊所电子处方软件V17.2为例说明&#xff0c;最新版V17.3下载可以点击最下方官网卡片了解。 1、在现实生活中&#xff0c;医师开单可谓是争分夺秒&…

云计算市场分析

目录 一、云计算市场概述 1.1 概述 二、国外云计算厂商 2.1 亚马逊AWS 2.2 微软AzureAzure 2.3 Apple iCloud 三、国内云计算厂商 3.1 阿里云 3.2 腾讯云 3.3 华为云 3.4 百度智能云 一、云计算市场概述 1.1 概述 云计算从出现以来&#xff0c;其发展就非常迅速。以…