c++可变数组类设计_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之2:详细模块的设计...

前面一篇文章介绍了小型编译器实现的准备工作,这篇我们就要动手开始写代码啦!相信通过前边的设计,大家是不是已经胸有成竹了呢?下面我们就来一个模块一个模块的分析,实现各个击破,fighting!


三、详细设计

该部分基于总体设计中描述的编译器的架构和功能流程,针对每个功能模块(词法分析、语法分析、语义分析、目标代码生成),进行详细的原理分析和模块设计,具体如下:

1. 词法分析模块(LEX.py)

1.1 目标

对输入的单词进行识别,并切出目标词。

1.2 要求

  1. 对形如//(单行注释)和/**/(跨行长注释)进行处理,即跳过注释。
  2. 按照词法规则识别出各类单词,识别的形式为经过处理后的文法。
  3. 将识别出来的单词加入单词识别表,返回识别的单词或是错误信息

1.3 功能模块

针对上述要求,设计词法分析LEX.py程序完成词法分析。由于python中含有对正则表达式进行处理的库(re),并且每个单词的构成法则符合正则表达式,所以,采用python正则表达式匹配的方法来实现此法分析,具体如下:

(1)定义单词存储结构

每个单词元组(类似于结构体):
Token = collections.namedtuple('Token', ['typ', 'value', 'line', 'column'])
针对每个单词,存储单词所属类别、单词的值、单词所在的行、单词所在的列

(2)定义单词识别规则

token_regulate = [   # 正则表达式规则构成(用来识别出一个个的单词)
 ('START', r'(/*)|(//)'),
        ('ID', r'[a-zA-Z]+[a-zA-z0-9]*'),  # 匹配id
 ('NUM', r'd+'),                       # 匹配整型数字
 ('RANGE', r'[,;#(){}]'),             # 匹配 ;
 ('OP', r'(==)|(>=)|(<=)|(!=)|[-+*/><]'),
        ('ASSIGN', r'='),                     # 匹配 =
 ('NEWLINE', r'n'),                   # 匹配换行
 ('SKIP', r'[ t]+')                   # 匹配空格或tab键
 ]

(3)生成单词识别的正则表达式规则

tok_regex = '|'.join('(?P<%s>%s)' % pair for pair in token_regulate)
get_token = re.compile(tok_regex).match

(4)词法分析总

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值