编译原理—无符号数的识别Python

本文介绍了编译原理中无符号数的识别过程,通过状态矩阵变化解析数字字符串,并提供了Python代码实现。在识别过程中,针对不同状态添加了对空格的判断,以确定正确的数值。文章还提到了在Python中将无符号数转换为float时可能出现的小数位数损失问题。
摘要由CSDN通过智能技术生成

编译原理—无符号数的识别Python

1.理解无符号数的识别过程
2.理解无符号数的状态矩阵变化过程,如下图:(图片引自老师PPT,仅供学习使用,侵权删)

  • w-----> 尾数累加器(初值为0)
  • p-----> 指数数累加器(初值为0)
  • n------>十进制小数位数计数器(初值为0,扫视到小数点后开始计数)
  • d-----> 0,1, 2, 3, 4, 5, 6, 7, 8, 9
  • . -----> 小数点
  • e-----> 用来记录十进制指数的符号(初值为1,遇到E或e后的符号时再改为-1)
  • other----除此之外的(下图0状态中ther为other)
    在这里插入图片描述上图会对以下情况截取识别为正确:
  • 1213ddas
  • 211e132dsf
  • 12.132dsd
  • 在代码中进行修正

1213ddas------>当前状态为1 时,添加判断条件是否为“ ”(一个空格),若为一个空格返回 w,其他返回"error"。
211e132dsf------>当前状态为6 时,添加判断条件是否为“ ”(一个空格),若为一个空格返回 (w * (10 ** (e * p - n))),其他返回"error"。
12.132dsd------>当前状态为2 时,添加判断条件是否为“ ”(一个空格),若为一个空格返回 (w * (10 ** (e * p - n))),
其他返回"error"。

基本步骤:
1.输入字符串(python中输入均为str),识别串是否为无符号数 数字字符串即可
2.在字符串后加一个空格,用来判断串是否结束
3.选取每一位,将状态和取到的字符通过上表进行变化
4.输出结论

源码:


"""
state: 0, 1, 2, 3, 4, 5, 6, error, 正确
"""

d = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']


def zore(i, w, n, p, e):

    """
    :param i: 当前取到的字符
    :param w:  尾数累加器
    :param n: 十进制数小数位数累加器
    :param p: 指数累加器
    :param e: 十进制指数的符号
    :return: state, i, w, n, p, e
    """
    state = 0
    if i in d:
        w = w * 10 + int(i)
        state = 1
        return state,i, w, n, p, e
    elif i == ".":
        state = 3
        return state,i, w, n, p, e
    else:
        state = "error"
        print("%s <---- %s" % (i, state))
        return state, i, w, n, p, e


def one(i, w, n, p, e):
    """
        :param i: 当前取到的字符
        :param w:  尾数累加器
        :param n: 十进制数小数位数累加器
        :param p: 指数累加器
        :param e: 十进制指数的符号
        :return: state, i, w, n, p, e
        """

    if i in d:
        w = w * 10 + int(i)
        state = 1
        return state,i, w, n,
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值