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

news2024/10/5 16:31:18

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

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

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

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

 (二)概要设计

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.coloradmin.cn/o/1306392.html

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

相关文章

苍穹外卖项目笔记(8)— 缓存商品、购物车功能

前言 代码链接&#xff1a; Echo0701/take-out⁤ (github.com) 1 缓存菜品 1.1 问题说明 【注】很多时候系统性能的瓶颈就在于数据库这端 1.2 实现思路 通过 Redis 来缓存数据&#xff0c;减少数据库查询操作 【注】Redis 基于内存来保存数据的&#xff0c;访问 Redis 数据…

python:五种算法(GA、OOA、DBO、SSA、PSO)求解23个测试函数(python代码)

一、五种算法简介 1、遗传算法GA 2、鱼鹰优化算法OOA 3、蜣螂优化算法DBO 4、麻雀搜索算法SSA 5、粒子群优化算法PSO 二、5种算法求解23个函数 &#xff08;1&#xff09;23个函数简介 参考文献&#xff1a; [1] Yao X, Liu Y, Lin G M. Evolutionary programming made…

JVS物联网、低代码、智能BI本周更新功能已上线

物联网应用更新功能 新增: 1.新增驱动管理功能&#xff0c;可新增、编辑、修改、删除、查看驱动实例&#xff1b; 驱动管理功能主要负责管理物联网设备的驱动实例。这些驱动实例可以新增、编辑、修改、删除或查看。通过这些驱动实例&#xff0c;平台可以与设备进行通信&…

Git 常用命令速查

一、 Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态git commit 提交git branch -a 查看所有的分支git branch -r 查看远程所有分支git commit -am "init" 提交并且加注释git remote add origin git192.168.1.119:ndshowgit push origin mas…

XML学习及应用

介绍XML语法及应用 1.XML基础知识1.1什么是XML语言1.2 XML 和 HTML 之间的差异1.3 XML 用途 2.XML语法2.1基础语法2.2XML元素2.3 XML属性2.4XML命名空间 3.XML验证3.1xml语法验证3.2自定义验证3.2.1 XML DTD3.2.2 XML Schema3.2.3PCDATA和CDATA区别3.2.4 参考 4.xml解析4.1准备…

Onlyoffice本地部署超详细教程(附协作空间2.0新资讯)

陈老老老板&#x1f934; &#x1f9d9;‍♂️本文专栏&#xff1a;生活&#xff08;主要讲一下自己生活相关的内容&#xff09;生活就像海洋,只有意志坚强的人,才能到达彼岸。 &#x1f9d9;‍♂️本文简述&#xff1a;ONLYOFFICE相信大家已经有所了解&#xff0c;本篇讲一下o…

香橙派orangepi5 定制ubuntu rootfs

问题与需求 公司3588s开发板外设少, 没有usb,网卡,扩展gpio. 需要使用其它3588开发板做验证. 香橙派orangepi5属于性价比很高的开发板. 需要部署环境rosopencv配置; 每次烧录,配置wifi, ip, frpc, 配置环境要30分钟. 问题: 烧录部署一台orangepi5, 需要30分钟, 浪费时间 …

用重建大师生成后的模型,和DLG有点偏差,不是特别吻合,是什么原因?另外这个读取实体多边形失败是为什么?

答&#xff1a;可以先检查下是否有先生成三维模型&#xff0c;三维模型和DLG是否位置是对应一起的。模型可以先检查位置精度是否满足要求。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0c;输入倾斜照片&#xff0c;激光点云&#xff0c;POS…

参加汽车销售技巧培训师司铭宇老师的课程的总结

参加汽车销售技巧培训师司铭宇老师的课程的总结 作为一名汽车销售人员&#xff0c;我深知销售技巧对于提升销售业绩的重要性。为了进一步提升自己的销售能力&#xff0c;我参加了司铭宇老师的汽车销售技巧培训课程。通过这次课程的学习&#xff0c;我收获颇丰&#xff0c;以下…

计网 - TCP扫盲

文章目录 知识点TCP头格式TCP有限状态机&#xff08;FSM&#xff09;为何需要TCP协议TCP的定义TCP连接的概念如何唯一确定一个TCP连接TCP vs UDPTCP拥塞控制TCP流量控制 导图 知识点 TCP头格式 TCP头部包含多个字段&#xff0c;其中一些是必需的&#xff0c;而另一些是可选的…

基于docker容器化部署微服务

前言 在笔者系列文章中微服务配置隔离已经完成服务之间的配置隔离&#xff0c;服务整体来说是已经通了。 为了方便后续测试已经环境统一&#xff0c;笔者本章节会对服务进行容器化部署。由于服务器性能问题&#xff0c;本次部署采用maven完成镜像构建&#xff0c;结合docker-c…

Linux 系统 SSH 和 SCP 服务器搭建、配置、访问以及出现的问题

SSH是Secure Shell的缩写&#xff0c;是一种网络协议&#xff0c;用于通过本地或远程网络在计算机上进行远程登录和命令操作。SSH 是 Telnet 协议的演变&#xff1a;正如其名称所描述的&#xff0c;SSH 是安全的&#xff0c;并对通过网络传输的数据进行加密。 SSH 是目前较为可…

[Halcon模块] Halcon13.0查询算子模块归属

&#x1f4e2;博客主页&#xff1a;https://loewen.blog.csdn.net&#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;本文由 丶布布原创&#xff0c;首发于 CSDN&#xff0c;转载注明出处&#x1f649;&#x1f4e2;现…

django实现增删改查分页接口

django实现增删改查分页接口(小白必备) 在上篇文章中我使用nodejs实现了增删改查分页接口&#xff0c;这一篇我们则使用django实现。 1.创建一个django项目&#xff0c;命令如下 python manage.py startapp myapp 2.在你自己的myapp文件夹中的models.py中定义你们自己的模型 f…

【每日一题】2697. 字典序最小回文串-2023.12.13

题目&#xff1a; 2697. 字典序最小回文串 给你一个由 小写英文字母 组成的字符串 s &#xff0c;你可以对其执行一些操作。在一步操作中&#xff0c;你可以用其他小写英文字母 替换 s 中的一个字符。 请你执行 尽可能少的操作 &#xff0c;使 s 变成一个 回文串 。如果执行…

数字化转型对企业有什么好处?

引言 数字化转型已经成为当今商业领域中的一股强大力量&#xff0c;它不仅仅是简单的技术更新&#xff0c;更是企业发展的重要战略转变。随着科技的迅猛发展和全球化竞争的加剧&#xff0c;企业们正在积极探索如何将数字化的力量融入到他们的运营和战略中。 数字化转型不仅是传…

SSD Wear Leveling磨损均衡,并不是一直有效,甚至有负面作用!-part1

1.引言 上一篇WL基础文章中&#xff0c;我们介绍了SSD为何需要Wear Leveling磨损均衡的基本原理和分类&#xff0c;阅读本文之前&#xff0c;建议先了解WL磨损均衡的相关背景&#xff1a; 扩展阅读&#xff1a;深入解析SSD Wear Leveling磨损均衡技术&#xff1a;如何让你的硬…

1.了解数据结构和算法

1.了解数据结构和算法 1.1 二分查找 二分查找&#xff08;Binary Search&#xff09;是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半&#xff0c;然后比较目标值与中间元素的大小关系&#xff0c;从而确定应该在左半部分还是右半部分继续查找。这个…

python读取csv文件

在Python中&#xff0c;你可以使用pandas库来读取CSV文件。以下是一个基本的例子&#xff1a; import pandas as pd# 读取CSV文件data pd.read_csv(filename.csv)# 显示前几行数据print(data.head()) 这里&#xff0c;filename.csv应该被替换为你的CSV文件的实际路径和名称。…

Python:核心知识点整理大全16-笔记

目录 8.2.3 默认值 8.2.4 等效的函数调用 8.2.5 避免实参错误 8.3 返回值 8.3.1 返回简单值 formatted_name.py 8.3.2 让实参变成可选的 8.3.3 返回字典 往期快速传送门&#x1f446;&#xff08;在文章最后&#xff09;&#xff1a; 8.2.3 默认值 编写函数时&#xff…