实现一个简单的词法分析器

本文介绍了如何实现一个简单的词法分析器,用于识别编程语言中的标识符、关键字和比较操作符。通过有限自动机的设计解决标识符与关键字冲突的问题,并提供了具体的代码实现示例。
摘要由CSDN通过智能技术生成

实现一个简单的词法分析器

词法分析

词法分析的工作是将一个长长的字符串识别出一个个的单词,这一个个单词就是 Token。而且词法分析的工作是一边读取一边识别字符串的,不是把字符串都读到内存再识别

词法单元:

  • 单词的内部表示是词法单元 token

  • 编程语言中最小的语法单元

  • 词法单元的表示

目标程序语句:

  • age >= 45

解析age >= 45

过程图:

图1.png

标识符、比较操作符和数字字面量这三种 Token 的词法规则:

  • 标识符:第一个字符必须是字母,后面的字符可以是字母或数字

  • 比较操作符:> 和 >=(其他比较操作符暂时忽略)

  • 数字字面量:全部由数字构成(像带小数点的浮点数,暂时不管它)

有限自动机:

图2.png

    1. 初始状态:刚开始启动词法分析的时候,程序所处的状态
    1. 标识符状态:在初始状态时,当第一个字符是字母的时候,迁移到状态 2。当后续字符是字母和数字时,保留在状态 2。如果不是,就离开状态 2,写下该 Token,回到初始状态
    1. 大于操作符(GT):在初始状态时,当第一个字符是 > 时,进入这个状态。它是比较操作符的一种情况
    1. 大于等于操作符(GE):如果状态 3 的下一个字符是 =,就进入状态 4,变成 >=。它也是比较操作符的一种情况
    1. 数字字面量:在初始状态时,下一个字符是数字,进入这个状态。如果后续仍是数字,就保持在状态 5

圆圈有单线的也有双线的。双线的意思是这个状态已经是一个合法的 Token 了,单线的意思是这个状态还是临时状态。

标识符和关键字规则的冲突

解析“int age = 40”这个语句,以这个语句为例研究一下词法分析中会遇到的问题:多个规则之间的冲突。

问题&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值