c语言 词法分析器 《编译原理》课程设计

设计、编制并调试一个词法分析程序,加深对词法分析原理的理解。

针对表达各类词语的一组正规表达式,设计一个确定化的最简的有限自动机,对输入的符号串进行单词划分及词类识别。

要求词法分析器的输入是字符串,输出是源程序中各单词的字符串、词的类别以及对应值。

算法的基本任务是从字符串表示的源程序中识别出具有独立意义的单词符号,其基本思想是根据扫描到单词符号的第一个字符的种类,拼出相应的单词符号。

 (二)概要设计

1.单词符号及内部表示表

单词符号

种别码

Int

1

关键字

break

2

关键字

if

3

关键字

long

4

关键字

while

5

关键字

union

6

关键字

return

7

关键字

double

8

关键字

else

9

关键字

X1+

10

标识符

25.2

11

数字

+-*、><

13~28

符号

// 跳过空白符,直至读入一个非空字符

char GetBC(int *p)

{

while(chStream[*p] == ' '){

(*p)++;

}

return chStream[(*p)++];

}

// 判断是否为字母

int IsLetter(char c)

{

    if(((c>='a')&&(c<='z'))||((c>='A')&&(c<='Z'))||ch=='~'){

return 1;

}

return 0;

}

// 判断是否为数字

int IsDigit(char c)

{

    if((c>='0'&&c<='9')|c=='.'){

return 1;

}

return 0;

}

// 搜索指针回调一个字符位置

void Retract(int *p)

{

(*p)--;

}

// 运算符和界符的判断

void solve(int *p)

{

memset(strToken, 0, sizeof(strToken));

ch = GetBC(p); // 跳过空白符,直至读入一个非空字符

if(IsLetter(ch)){ // 第一个是字母,则可能是关键字也可能是标识符

int idx = 0;

while(IsLetter(ch) || IsDigit(ch)){

strToken[idx++] = ch;

ch = GetChar(p);

}

输入:输入源码字符串,然后以@结尾就好。

输出:会在屏幕上输出分析后的结果序列。

  • 收获、不足与感想

成功实现了基本的词法分析器,能够识别关键字、标识符、数字和符号。使用了数组和指针等基本数据结构和操作。可能需要更多的注释和说明,以提高代码的可读性和可维护性。对于错误处理和异常情况的处理较为简单,可以进一步完善。通过编写词法分析器,加深了对字符处理、数组操作和程序流程控制的理解。学到了如何处理关键字、标识符和数字等基本语法结构。这是一个简单但有效的词法分析器,还可以进一步扩展和改进。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/218245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装odoo17 Windows版时,PostgreSQL Database无法被勾选

安装odoo17 Windows版时&#xff0c;PostgreSQL Database无法被勾选。 出现的原因是&#xff0c;曾经安装过PostgreSQL Database&#xff1b;虽然可能已被卸载&#xff0c;但注册表内还有残余信息&#xff0c;导致odoo认为PostgreSQL Database仍存在于系统之中。 解决方案 删…

三勾商城新功能-电子面单发货

商家快递发货时可以选择在线下单,在线获取和打印电子面单。免去手写面单信息以及避免填写运单号填错,系统会自动填写对应发货商品的运单信息 快递100电子面单1、进入快递100&#xff0c;点击登录 2、登录成功后&#xff0c;点击“电子面单与云打印” 3、进入电子面单与云打印后…

AI全栈大模型工程师(二十七)如何部署自己 fine-tune 的模型

服务器价格计算器 火山引擎提供的这个价格计算器很方便&#xff0c;做个大概的云服务器 GPU 选型价格参考。其它服务厂商价格相差不是很多。 https://www.volcengine.com/pricing?productECS&tab2 高稳定和高可用地部署模型 序号模块名称描述1负载均衡将流入的请求分发到多…

基于Java SSM框架实现沙县小吃门店连锁点餐订餐系统项目【项目源码+论文说明】

基于java的SSM框架实现县小吃门店连锁点餐订餐系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 沙县小吃点餐系统&#xff0c;主要的模块包括实现管理员&#xff1b;个人中心、用户管…

Linux 安装图形界面 “startx”

———————————————— 报错&#xff0c;如下&#xff1a; bash :startx command not found ———————————————— 解决方法&#xff1a; 1.先安装 — X Windows System&#xff0c;输入以下命令&#xff1a; yum groupinstall “X Window System”…

盘点2023年低代码平台TOP10

盘点2023年低代码平台TOP10 1 什么是低代码平台2 十大低代码平台2.1 IVX2.2 简道云2.3 伙伴云2.4 企名片one2.5 明道云2.6 轻流2.7 速融云2.8 轻舟——网易2.9 钉钉宜搭2.10 腾讯云-微搭 1 什么是低代码平台 低代码平台是一种开发软件的方法&#xff0c;它可以通过简单的拖放和…

【Anaconda】Ubuntu anaconda使用(新建环境、最小化安装Tensorflow)

Ubuntu anaconda使用&#xff08;新建环境、最小化安装Tensorflow&#xff09; 清华源地址&#xff1a; https://pypi.tuna.tsinghua.edu.cn/simplepip安装使用的时候&#xff0c; pip install xxx(库名) -i https://pypi.tuna.tsinghua.edu.cn/simple请先安装好anaconda&am…

Python 递归及目录遍历

递归调用&#xff1a;一个函数&#xff0c;调用了自身&#xff0c;称为递归调用 递归函数&#xff1a;一个会调用自身的函数 凡是循环能做的事&#xff0c;递归都能做。 目录 递归示例 普通方法实现 递归方式实现 计算分析&#xff1a; 递归遍历目录 引入os 遍历目录 执…

基于SSM的小儿肺炎知识管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

MobileNet网络

介绍 MobileNet 网络专注于移动端或者嵌入式设备中的轻量级CNN网络&#xff0c;相比传统卷积神经网络&#xff0c;在准确率小幅降低的前提下大大减少模型参数与运算量&#xff08;相比VGG16准确率减少了0.9%&#xff0c;但模型参数只有VGG的1/32&#xff09; 网络中的亮点&am…

利用知识付费小程序,我有才打造高效的知识传播渠道

在当今信息爆炸的时代&#xff0c;知识管理已经成为了每个人必须面对的问题。然而&#xff0c;市面上的知识付费平台大多数都是通用的&#xff0c;无法满足个性化需求。 因此&#xff0c;我有才提供了一款专属定制的适合个人的知识付费平台。核心产品能力如下&#xff1a; 一…

Java:TCP 通信方法(基本发送 + 接收)并 实现文件传输且反馈

TCP 通信编程 TCP:是一种可靠的网络协议&#xff0c;再通信两端都建立一个Socket对象。 通信之前要保证连接已经建立。 通过Socket产生IO流进行通信。 创建对象时&#xff0c;会连接服务器&#xff0c;连接不上&#xff0c;会报错。 所以&#xff0c;先运行服务端&#xff0c;再…

6大最佳目标进度管理软件盘点——团队/个人

在当今快节奏的生活和工作中&#xff0c;有效地管理目标和任务对于每个人来说都至关重要。在工作中&#xff0c;我们需要清晰地规划项目目标、安排任务和追踪进度&#xff1b;在生活中&#xff0c;我们也需要合理安排时间、记录重要事项以及追踪个人目标的实现进度。为了更好地…

【Maven技术专题】「知识盲区」教你如何使用深入分析Maven配置私服仓库的使用指南(基础篇)

Maven私服的使用实战 将内部构件部署到私服仓库什么是仓库和仓库组远程仓库的定义仓库定义基本结构仓库结构的属性介绍 部署部件到远程仓库远程仓库的认证用户名密码认证案例参考 私钥进行鉴权 镜像mirror镜像仓库的工作原理 将内部构件部署到私服仓库 如果想先学好什么如何将…

AMEYA360:海康存储PCIe4.0固态硬盘A4000介绍

海康存储即将发布PCIe4.0固态硬盘新品A4000&#xff0c;搭载全新定制主控及高品质3D NAND闪存颗粒&#xff0c;最大顺序读取速度达7100MB/s&#xff0c;提供五年质保服务。 2022年&#xff0c;海康存储开始在PCIe 4.0固态硬盘领域全面发力&#xff0c;推出C4000 ECO、C4000等多…

【OpenVINO】使用OpenVINO实现 RT-DETR 模型 INT8量化推理加速

使用OpenVINO实现 RT-DETR 模型 INT8量化推理加速 1. 使用 OpenVINO 实现 RT-DETR 模型 INT8量化1.1 神经网络压缩框架 &#xff08;NNCF&#xff09;1.2 准备校准数据集1.2.1 下载COCO验证数据集1.2.2 Validator包装器1.2.3 转换用于量化的数据集 1.3 定义模型精度校验方法1.4…

DBA轻松应对慢查询挑战,使用NineData这款工具就够了!

对于一个 DBA 来说&#xff0c;从公司数据库系统的稳定程度可以看出他的能力几何&#xff0c;一个优秀的 DBA 不仅要保证数据库的稳定运行&#xff0c;还需要有能力有效处理数据库的各种突发性能问题&#xff0c;而最常见的性能问题&#xff0c;就是慢查询。 我们公司规模比较…

docker-compose 单机容器编排

docker-compose 单机容器编排 dockerfile&#xff1a;先配置好文件&#xff0c;然后build&#xff0c;镜像------->容器 docker-conpose既可以基于dockerfile&#xff0c;也可以基于镜像&#xff0c;一件事拉起镜像和容器。 docker-compose 核心就是yml文件&#xff0c;可…

共享门店会在未来新零售占据主角吗?

共享门店作为一种创新的商业模式&#xff0c;在未来新零售领域中可能会占据一定的角色&#xff0c;但具体是否会成为主角&#xff0c;还需要根据市场的发展和技术的进步来判断。 首先&#xff0c;共享门店模式通过资源共享、风险共担、客户共享和收益共享等方式&#xff0c;为…

WordPress插件你好多莉( Hello Dolly )可否卸載

什么是你好多莉Hello Dolly WordPress插件 你好多莉是 WordPress插件 简单的预装在 WordPress 上。 如果您激活后者&#xff0c;它将显示出名曲的歌词“ 你好&#xff0c;多莉 “要 路易斯阿姆斯特朗. 您可能已经注意到&#xff0c;在阅读插件说明时&#xff0c;还不够清楚。 …