IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 【编译原理】使用python构造高级语言c语言的词法分析程序,模拟词法分析过程 -> 正文阅读

[C++知识库]【编译原理】使用python构造高级语言c语言的词法分析程序,模拟词法分析过程

??????构造高级语言的词法分析程序,模拟词法分析过程。程序要求能对输入的字符串流进行词法分析,在实验的过程中,学会应用单词分析的方法——NFA(非确定有穷自动机)和DFA(确定有穷自动机),加深对词法分析原理的理解。

  1. 词法分析程序能够识别关键字、运算符号和定界符
  2. 识别其它单词是标识符(id)和整型常数(num),通过下列正规式定义。
    id=letter(letter|digit)*
    num=digit digit*
    letter=a |…|z|A|…|Z ,digit=0|…|9 小写和大写字母是有区别的。
  3. 词法分析程序的功能
    (1)输入为所给文法的源程序字符串。
    (2)程序的输出形式为二元组单词串的输出形式。

示例:
测试数据:
输入的文件为: a.txt
int main()
{int abc=3;

程序执行结果为:
单词 单词类别
int 关键字
main 关键字
( 定界符
) 定界符
{ 定界符
abc 标识符
= 运算符
3 整数
} 定界符

import re

#关键字,百度百科上复制来的63个关键字……
key_word = ['asm','do','if','return','typedef','auto','double','inline','short','typeid','bool',
            'dynamic_cast','int','signed','typename','break','else','long','sizeof','union','case',
            'enum','mutable','static','unsigned','catch','explicit','namespace','static_cast',
            'using','char','export','new','struct','virtual','class','extern','operator','switch',
            'void','const','false','private','template','volatile','const_cast','float','protected',
            'this','wchar_t','continue','for','public','throw','while','default','friend','register'
            'true','delete','goto','reinterpret_cast','try','main']

#一些常用函数,不然老被识别为标识符,目前是16个
function_word = ['cin','cout','scanf','printf','abs','sqrt','isalpha','isdigit','tolower','toupper'
                 'strcpy','strlen','time','rand','srand','exit']
#运算符
operator = ['+','-','*','/',':',':=','<','<>','<=','>','>=','=','%']
#定界符
delimiters =[';','(',')','#','==','{','}',',','&','[',']',"'","."]
with open('cpp.txt', 'r') as file:
        #预处理,增加了去除字符串的功能,毕竟字符串肯定不是标识符啊……
        txt = ' '.join(file.readlines())
        deal_txt = re.sub(r'/\*(.|[\r\n])*?\*/|//.*', ' ', txt)
        deal_txt = re.sub(r'\"(.|[\r\n])*?\"', ' ', txt)
        deal_txt = deal_txt.strip()
        deal_txt = deal_txt.replace('\t', ' ').replace('\r', ' ').replace('\n', ' ')
        #词法分析,标识符识别规则加入了_
        keyword = []
        funword = []
        opeword = []
        idword = []
        numword = []
        deword=[]
        errword = []
        #把不同类型字符分类
        #标识符型
        pha = re.findall(r'[a-zA-Z_][a-zA-Z0-9_]*', deal_txt)
        #数字型
        num = re.findall(r'\d+',deal_txt)
        #符号型
        str = re.findall(r'[^\w]', deal_txt)
        #从标识符型里找出关键字、保留字、自定义标识符
        for p in pha:
            if p in key_word:
                keyword.append(p)
            elif p in function_word:
                funword.append(p)
            else:
                idword.append(p)
        #找出数字型
        for n in num:
            numword.append(n)
        #找出运算符和分隔符
        for s in str:
            if s in operator:
                opeword.append(s)
            elif s in delimiters:
                deword.append(s)
            elif s != ' ':
                errword.append({s : 'ERROR'})
        print("关键字:\n", keyword)
        print('函数:\n', funword)
        print("标识符:\n", idword)
        print("数字:\n", numword)
        print("运算符:\n", opeword)
        print("界符:\n",deword)
        if len(errword) != 0:
            print("其他:\n", errword)

运行结果:
在这里插入图片描述

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:24:29  更:2022-04-26 11:25:34 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:21:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码