编译原理-实现识别标识符的词法分析器——沐雨先生

news2024/12/28 3:45:32

实验任务:

实现识别标识符的词法分析器

实验要求:

根据编译原理理论课教材中图2.3“标识符的转换图”,用C语言编写识别标识符的词法分析器,以文本文件为输入,控制台(或文件)输出识别出的每个标识符。

实验内容:

将txt文件里的内容作为输入的字符串,去除掉文本中的空格后,按照种别码进行识别判断,用自定义函数数字判断、字母判断和符号判断作为标识符和关键字的判断工具。
运行结果如图:
在这里插入图片描述
主要代码:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

源代码

输入

intd+asd,j48494h>jkasinteia2main31012><-=07,0x16

输出

关键字:int
标识符:d
标识符:asd
标识符:j48494h
标识符:jkasinteia2main31012
标识符:x16

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void main(){
	FILE *in,*out;
    char w;
	int flag;
	char str;
	char words[100][100]={'\0'};//最多存放长度为100的100个单词
	int i=0,j=0;
	char letter[10000];//存放文件取出的字符,最长10000 
	int length=0;//所有字符的长度
	int num=0;//当前所在位置
    if( (in=fopen("example.txt","r")) ==NULL ){
		printf("can't open file!\n");
		exit(0);
	}
	else
		printf("打开文件成功\n");

	if( (out=fopen("result.txt","w")) ==NULL ){
		printf("can't open file!\n");
		exit(0);
	}
	else
		printf("打开文件成功\n");
	
    while( !feof(in) ){
		w=fgetc(in);
        if(w!=' '){
            letter[length]=w;
            length++;
        }   //去掉程序中的空格
    }

    flag=1;
	while(flag){
		for(j=0;num<length;num++,j++){
			str=letter[num];
			if( str>='a' && str<='z' || str>='A' && str<='Z' || str=='_' || (j!=0 && str>='0' && str<='9') ){
				words[i][j]=letter[num];
				if( !(strcmp(words[i],"main")&&strcmp(words[i],"int")&&strcmp(words[i],"if")&&strcmp(words[i],"else")&&strcmp(words[i],"while")&&strcmp(words[i],"do")&&strcmp(words[i],"then")) ){//若以此首字母开头 先组成了关键字 则先输出该关键字 
					fputs("关键字:",out);
					fputs(words[i],out);
					fputs("\n",out);
					i++;
					num++;
					break;
				}
			}
			else
				if(words[i][0]=='\0'){
					num++;
					break;
				}
				else{
					fputs("标识符:",out);
					fputs(words[i],out);
					fputs("\n",out);
					num++;
					i++;
					break;
				}
		}
		if(num==length)
			flag=0;
	}
    fclose(in);//关闭文件 
    fclose(out);//关闭文件 
	printf("完成,请查看!\n");
}

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

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

相关文章

别忽视平台的重要性

目录 前言&#xff1a; 与谁在一起&#xff0c;真的很重要 别把运气当才华&#xff0c;别把平台当本事 珍惜平台&#xff0c;用好平台 前言&#xff1a; 对于做技术开发的人来说&#xff0c;一头扎进技术里面去固然重要&#xff0c;但是很多时候&#xff0c;也要看看人际交…

springboot“爱相连”儿童慈善管理系统的设计与实现

摘要 随着网络科技的不断发展以及人们经济水平的逐步提高&#xff0c;网络技术如今已成为人们生活中不可缺少的一部分&#xff0c;而信息管理系统是通过计算机技术&#xff0c;针对用户需求开发与设计&#xff0c;该技术尤其在各行业领域发挥了巨大的作用&#xff0c;有效地促…

webpack5零基础入门-8清空前次打包文件与处理图标字体资源

1.配置output中的clean属性为true output: {/**文件输出路径 绝对路径*///__dirname 表示当前文件的文件夹目录path: path.resolve(__dirname, dist),//所有文件的输出目录/**文件名 */filename: static/js/dist.js,//入口文件输出文件名clean: true,//在打包前将path整个目录内…

Cesium 显示实时鼠标位置和视角信息

根据鼠标移动的位置计算鼠标所在位置的经纬度 监听视角变化情况显示视高、方位角、俯仰角 监测底图切片等级来显示当前地图缩放等级 showMapData() {let _this thislet handler new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas)handler.setInputAction(function (mo…

Soft Robotics 变结构手掌和变刚度手指的仿人软体手的人机交互操作-武科大ESIR课题组师兄成果

一、引言 在当今的机器人技术领域&#xff0c;人类对机器人的需求日益增长&#xff0c;涉及到工业生产、医疗护理、服务业等各个领域。然而&#xff0c;由于任务的多样性和复杂性&#xff0c;单独依靠自主机器人操作往往难以满足实际需求。为了解决这一问题&#xff0c;人机协作…

软件设计和体系结构

软件设计和体系结构 一、引言 软件 定义&#xff1a;一系列按照特定顺序组织的计算机数据、指令的集合 特点&#xff1a; 软件不是生产制造&#xff0c;是设计开发软件不会磨损和老化软件需要根据实际情况进行定制开发 软件设计的基本原则 抽象方法 过程抽象&#xff1a;是指…

【物联网】Modbus 协议及Qinghub物联网平台应用

Modbus 协议简介 QingHub设计器在设计物联网数据采集时不可避免的需要针对Modbus协议的设备做相关数据采集&#xff0c;这里就我们的实际项目经验分享Modbus协议 你可以通过QingHub作业直接体验试用&#xff0c;也可以根据手册开发相应的代码块。 qinghub项目已经全面开源。 …

从 VNCTF2024 的一道题学习QEMU Escape

说在前面 本文的草稿是边打边学边写出来的&#xff0c;文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似&#xff0c;在分析结束以后我又在部分比较模糊的地方加入了一些补充&#xff0c;因此阅读起来可能会相对轻松。&#xff08;当然也不排除这是…

数据结构知识点总结00-知识点目录

专栏主页&#xff1a; 数据结构算法程序设计基础C语言知识点总结https://blog.csdn.net/seeker1994/category_12585732.html C语言知识点总结00-C语言知识点目录 最优算法100例00-最优算法100例目录 ...... 数据结构知识点目录 要求&#xff1a; &#xff08;1&#xff…

什么蓝牙耳机最好?2024年五大优质品牌机型,真实评测助你决策

​随着科技的进步&#xff0c;无线蓝牙耳机已经取代了传统的有线耳机&#xff0c;成为新的趋势。尽管无线蓝牙耳机种类繁多&#xff0c;挑选合适的款式并不容易。我整理了几款表现不错的蓝牙耳机&#xff0c;希望这篇文章能帮助你找到适合自己的真无线蓝牙耳机。 一、挑选蓝牙耳…

C语言中,可以在子函数中动态申请一个指向二维数组的内存给调用函数使用么——看ChatGPT的回答——

下面是ChatGPT的回答&#xff0c;太专业了&#xff0c;比网上查的资料都好很多可能。 是的&#xff0c;可以在子函数中动态申请一个指向二维数组的内存&#xff0c;然后将其传递给调用函数使用。在C语言中&#xff0c;可以通过以下方式实现&#xff1a; #include <stdio.h…

英国伦敦交易所股票清单列表数据API接口

# Restful API https://tsanghi.com/api/fin/stock/XLON/list?token{token}更新时间&#xff1a;收盘后3~4小时。 更新周期&#xff1a;每天。 请求方式&#xff1a;GET。 # 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/…

IO Watch:用 Arduino UNO 制造的可编程手表

MAKER:mblaz/译:趣无尽 Cherry(转载请注明出处) 关于手表的项目,之前我们已经介绍过一款《Arduino + 3D 打印 DIY 电子手表》。本期的项目同样的一款基于 Arduino UNO 的可编程的手表,相比之下制造门槛更高一些。同时它更成熟、实用,外形也很有设计感,非常的漂亮! 这…

TEAM标签管理体系是什么?如何进行数据权益的保护?

TEAM标签管理体系是什么&#xff1f;如何进行数据权益的保护&#xff1f; 导读一、数据权益保护的难点及解决思路二、数据权益保护的“TEAM”管理体系1、Tagging&#xff08;打标&#xff09;&#xff1a;为数据资源提供全生命周期跟踪保护2、Ensuring&#xff08;保障&#xf…

将复数的实部和虚部或数值的符号都取反operator.neg(num)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将复数的实部和虚部 或数值的符号都取反 operator.neg(num) [太阳]选择题 关于operator.neg()的功能说法正确的是&#xff1f; import operator print("【执行】operator.neg(34j)"…

无硫防静电手指套:高科技产业的纯净与安全新选择

随着科技的飞速发展&#xff0c;高科技产业对于生产环境的纯净度和产品的防静电要求日益严格。为了满足这一高标准的需求&#xff0c;无硫防静电手指套应运而生&#xff0c;以其独特的无硫特性和出色的防静电功能&#xff0c;迅速成为了高科技产业中的纯净与安全新选择。 无硫手…

react中JSX的详解

目录 JSX的本质及其与JavaScript的关系探究 一、JSX的本质 二、JSX与JavaScript的关系 三、为什么要使用JSX 四、不使用JSX的后果 五、JSX背后的功能模块 JSX的本质及其与JavaScript的关系探究 在React开发中&#xff0c;JSX是一个不可或缺的部分。那么&#xff0c;JSX的…

C++:函数传参到函数执行结束发生了什么

首先要明确两个概念 函数实参的入栈从右向左栈区从高地址向低地址偏移 接下来看下面一段代码 void fun(int a,int b,int c){std::cout<<&a<<" "<<&b<<" "<<&c<<std::endl; } int main(){fun(1,2,3); }…

最全集装箱知识汇总详解!

1、大柜、小柜、双背是指&#xff1f; 集装箱有不同的尺寸和搭配方式&#xff0c;大柜、小柜、双背就是其中的一些常见的分类。具体来说&#xff1a; 大柜是指长度为40英尺的集装箱&#xff0c;一般有40GP和40HQ两种类型。45英尺的集装箱比较特殊&#xff0c;不算大柜。 小柜…

10.用AI解释AI

文章目录 用AI解释AI目的思路成功解释实例失败例子 评估解释结果结果分析方法小结整体评估缺点与改进其他槽点 部分截图来自原课程视频《2023李宏毅最新生成式AI教程》&#xff0c;B站自行搜索。 用AI解释AI来自openAI的论文&#xff1a; Language models can explainneurons …