编译原理——词法分析(一)

词法分析

一、词法分析的基本功能

词法分析程序是编译程序的一部分,是整个编译过程的第一步工作

二、词法分析器

读取源程序的字符序列,逐个拼出单词并构造相应的内部表示。同时检查源程序中的词法错误。它的核心作用即将字符序列转化为计算机内部表示
词法分析器的接口:

  1. 作为语法分析程序的子程序(每次将词法分析程序作为一个函数,得到一个token发给语法分析程序)——实际使用的编译器常用的实现形式
    在这里插入图片描述
  2. 作为编译器的独立一遍处理器——课堂理解

在这里插入图片描述

三、单词的分类及内部表示

定义:单词语言中具有独立含义的最小语义单位

lexical analysis method//划分的形式:这三个单词即最小
x1+y//x1 + y,x1不能继续划分,与用户写这段程序时的含义要符合

分类:程序中会出现什么类型的单词,每种类型的单词处理的方式不同

  1. 保留字(一个语言保留字出现的个数和作用是定义好的)
  2. 标识符(可以是变量名、函数名、类名…有具体的命名规则,排列多样∞)
  3. 常量(true/false,10,helloworld)
  4. 特殊符号(运算符、界限符、格式符)
    在这里插入图片描述

四、词法分析的工具(单词的描述工具)

  1. 正则表达式
    在这里插入图片描述

  2. 自动机
    在这里插入图片描述

五、正则表达式

1. 基本概念

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
从A、B中任意选取符号串连接到一起。
在这里插入图片描述
在这里插入图片描述

2. 正则表达式

在这里插入图片描述
定义如此,但是根据不同的场景不同有不同的解释方式来解决不同的问题;就是说正则表达式不仅仅可以依附于字符串加以定义,可以应用在其他事务上,定义只是形式,含义需要赋予相应的解释。但是由于这里学习正则表达式是为了更好的描述词法分析所对应的符号串,所以要建立正则表达式和符号串的联系。
在这里插入图片描述
和符号串对应的正则表达式定义(2‘)
在这里插入图片描述
另一种定义方式,实际上和上面的没有区别:
在这里插入图片描述
注意对于|和·的理解,空串和空集是不一样的。"" 和 null是不一样的

3. 正则表达式的性质

在这里插入图片描述
在这里插入图片描述首先标识符要考虑一定是以字母开头的,所以前面L,后面可以是字母和数字的任意组合
整数首先考虑符号正负和无符号数(有些语言不允许有前导0),不能有前导0把0单独作为一部分或运算;实数就是使用小数的形式表示

4. 正则表达式的局限性

在这里插入图片描述
只想要对称,但是第一个会有abaa这种形式;还有其他的不能表示的情况

5. 例题部分

在这里插入图片描述
(a|b)*:相当于S={a,b}然后这个取星闭包,就是S1,S2…这些,是在这里面任意取,所以是任意的在这个字母表中的字符串集。
在这里插入图片描述
这里的二进制数不包括含有前导0的,0100这种不行

  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值