TEST语言编译器--词法分析

TEST语言编译器 目录

词法分析

词法分析时,依次读入源程序中的每个字符,依据语言的构词规则,识别出一个个具有独立意义的最小语法单位,即“单词”,并用某个单词符号来表示每个单词的词性是标识符、分界符还是数。


TEST语言词法规则

详细规则参照原书附录 A.1

TEST语言的单词符号如下:
标识符(identifier):字母打头,后接字母数字,用ID标识
保留字(keyword) :if、while、for等, 直接用保留字标识
无符号整数 (number): 数字组成,用NUM标识
分界符 :单分界符(sigleword) + - * / 等 ; 双分界符 >= 等
注释符 :/* 和 */

正则文法见原书

词法分析程序设计

原书代码通过逐字读取源代码文件进行分析,将分析结果以 “词性 + 单词” 的形式输出到文件中保存。笔者稍微改进了输出方式:将每个单词以字典的形式保存在了”words.josn“文件当中,其中每个单词的字典包含了词性 “type” 和 本身的值 “value” 。
词法分析仍采用逐字读取,并严格按照词法的正则文法进行分析。
分析过程中同时进行检测错误


更新 2019/10/14

加入新关键词 ‘do’, ‘switch’, ‘case’, ‘break’, ‘continue’


words_analysis.py

import json
from myexception import MyException, error_path
code_file_name = 'source_code.txt'

noneword = [' ', '\t', '\n']
keyword = ['if', 'else', 'elif', 'for', 'while', 'do', 'int', 'read',
           'write', 'switch', 'case', 'break', 'continue']
singleword = '+-*(){},;:'
doubleword = '><=!'
doublewords = ['>=', '<=', '==', '!=']
noteword = '/'


@error_path
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值