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

实验任务:

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

实验要求:

根据编译原理理论课教材中图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);}elseprintf("打开文件成功\n");if( (out=fopen("result.txt","w")) ==NULL ){printf("can't open file!\n");exit(0);}elseprintf("打开文件成功\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;}}elseif(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.hqwc.cn/news/542842.html

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

相关文章

Vue.js 应用实现监控可观测性最佳实践

前言 Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。无论是简单还是复杂的界面&#xff0c;Vue 都可以胜任。 TinyPro 是一套使用 Vue …

Javaweb--CSS

一&#xff1a;概述 CSS &#xff08;Cascading Style Sheet&#xff08;层叠样式表&#xff09;&#xff09;是一门语言&#xff0c;用于控制网页表现。 W3C标准规定了网页是由以下组成&#xff1a; 结构&#xff1a;HTML 表现&#xff1a;CSS 行为&#xff1a;JavaScrip…

人民艺术家、中国书画院院士王家才

人民艺术家王家才 在中国画坛的广袤土地上&#xff0c;一位名叫王家才的艺术家以其深厚的艺术造诣和独特的艺术风格&#xff0c;赢得了“人民艺术家”的殊荣。她的作品不仅在国内受到广泛赞誉&#xff0c;还多次走出国门&#xff0c;成为中外文化交流的桥梁。 王家才女士是一…

RTT——stm32f103的can总线通信

1.创建工程 2.配置时钟和引脚 引脚配置使能CAN 时钟配置&#xff0c;采用外部高速时钟 生成MDK工程后复制相关初始化函数到RTT-studio中 将void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)函数复制至broad.c文件中 将时钟配置函数复制到drv_clk.c中&#xff0c;只复制函数…

状态管理工具 PInia 初步上手指南

Vuex 作为一个老牌 Vue 状态管理库&#xff0c;大家都很熟悉了。 Pinia 是 Vue.js 团队成员专门为 Vue 开发的一个全新的状态管理库&#xff0c;并且已经被纳入官方 github&#xff0c;为什么有 Vuex 了还要再开发一个 Pinia &#xff1f; 先来一张图&#xff0c;看下当时对于…

机器学习之客户违约预测模型搭建之案例实战

1. 决策数模型搭建 1.1 数据预处理 客户违约预测模型的目的是通过已有的客户信息和违约表现来搭建合适的模型&#xff0c;从而预测之后的客户是否会违约。首先通过pandas库读取数据相关知识读取客户的证信数据以及其交易表现&#xff0c;即是否违约记录&#xff0c;代码如下&…

RK3568平台开发系列讲解(pinctrl篇)什么是 pinctrl子系统

🚀返回专栏总目录 文章目录 一、pinctrl 设备树二、pinctrl 驱动沉淀、分享、成长,让自己和他人都能有所收获!😄 Linux 中的 pinctrl 子系统(Pin Control Subsystem) 是一个用于管理和配置通用输入/输出(GPIO) 引脚的框架。 它提供了一种标准化的方法, 以在 Linux 内…

JAVA实战开源项目:森林火灾预警系统(Vue+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟雾传感器模块2.4 温度传感器模块2.5 历史记录模块2.6 园区数据模块 三、系统设计3.1 用例设计3.1.1 森林园区基础系统用例设计3.1.2 森林预警数据用例设计 3.2 数据库设计3.2.1 烟雾…

Halcon图像预处理、阈值分割

1、blob&#xff08;Binary Large Object&#xff09;是指二值图像中连通区域。 预处理通常包括一系列步骤&#xff0c;例如去噪、形态学操作、特征提取等。 read_image(Image,claudia) get_image_size(Image,Width,Height) dev_open_window_fit_size (0, 0, Width, Width, -1,…

java学习之路-程序逻辑控制

目录 1.分支结构 1.1 if语句 栗子 判断奇数还是偶数 判断一个年份是否为闰年 1.2switch语句 栗子 2. 循环结构 2.1while 循环 栗子 2.2break和continue break continue 2.3for循环 基本语法 栗子 2.4 do while 循环 3.输入输出 3.1输出 3.2从键盘输入 栗子…

Webapi(.net6) 批量服务注册

如果不考虑第三方库&#xff0c;如Autofac这种进行服务注入&#xff0c;通过本身的.Core Weabpi实现的&#xff0c;总结了两种实现方法&#xff0c; 1.一种是参考abp框架里面的形式; 1.1 新建个生命周期的文件夹: 三个接口分别为: public interface IScopedDependency { }pu…

因为manifest.json文件引起的 android-chrome-192x192.png 404 (Not Found)

H5项目打包之后&#xff0c;总是有这个报错&#xff0c;有时候还有别的icon也找不见 一通调查之后&#xff0c;发现是因为引入了一个vue插件 这个插件引入之后&#xff0c;webpack打包的时候就会自动在dist文件夹中产生一个manifest.json文件这个文件里面主要就是一些icon地址的…