详尽分享词法分析程序

简介: 详尽分享词法分析程序

一、实验目的

学习和掌握利用有限自动机编写词法分析程序。

实验要求如下:

二、程序功能描述

简要描述:该程序根据C语言的文法,实现了C语言词法分析。

详细来说,其功能主要表现在:

①该程序可以从头到尾扫描整个文本

②该程序可以分析每个token是什么,如int为保留字,>=是双字符分节符

③该程序可以实现报错

三、主要数据结构描述

1、keyArray【】

key是一个数组,存放保留字。 提供给扫描器,以识别每个token是否为保留字。

2、ch

ch是一个字符变量,保存的是从源程序中读取的单个字符。

3、result

result是一个字符串变量,保存的是从源程序中连续读取的字符串。

4、resultArray【】

resultArray是一个字符串数组,用于存放每个获取的单词的值。

5、resultNum

resultNum是一个整型变量,用于记录获取单词的个数。

四、程序结构描述

1、设计方法——构造有限自动机

为方便表示,加上了

→ |

其余略。

2、函数定义及函数之间的调用关系

(1)bool isKey(string s)

函数名称:isKey

参数解释:字符串变量s

返回值:bool值

功能:判断一个字符串是否为保留字,若是,返回True,否则返回False。

(2)bool isOperator(char ch)

函数名称:isOperator

参数解释:字符变量ch

返回值:bool值

功能:判断一个字符是否为运算符,若是,返回True,否则返回False。

(3)bool isSeparator(char ch)

函数名称:isSeparator

参数解释:字符变量ch

返回值:bool值

功能:判断一个字符是否为分隔符,若是,返回True,否则返回False。

(4)int main( )

函数名称:main

参数解释:无

返回值:int

功能:主函数,实现文本读取,扫描分析,结果文件输出功能。

调用关系:扫描每一个字符时利用自定义的isOperator(ch)

和isSeparator(ch) 以及string库中的isalpha(ch) 和 isdigit(ch)来判断该字符为何类型,有以下几种情况:

1、若读入首字符为字母

①:继续读入字母、数字,组成标识符或关键字

②:读取过程中读到操作符或分隔符,则保存该标识符或关键字。

③:读取过程中遇到违规字符,则一并读取后续字母和数字,直到遇到操作符或分隔符,并报错。

2、若读入首字符为数字

①:继续读入数字,组成无符号整数

②:遇到操作符或分隔符正常终止,并保存该常数

③:若读入其他错误字符,一并读取后续字母和数字,直到遇到操作符或分隔符,并报错。

3、若读入首字符为运算符

①:判断是否为双字符边界

②:下一个字符若为字母、数字、分隔符,正常保存运算符。

③:若非上述字符,则将错误输入符一并读取并报错。

4、若读入首字符为分隔符

①:保存该分隔符

5、若读入首字符为非法字符——报错

五、程序测试

测试用例1:

测试结果截图1:

测试用例2:

测试结果截图2:

六、实验总结

词法分析是编译器进行文法分析的第一步,完成词法分析任务的程序称为词法分析程序或词法分析器或扫描器。从左至右地对源程序进行扫描,按照语言的词法规则识别各类单词,并产生相应单词的属性字。

经过本次实验,我学会了如何用有限自动机理论编写词法分析程序,对编译器如何分析文法有了更深一步的理解。

七、源代码

cpp

#include

#include

#include

#include

#define LENGTH 32

using namespace std;

//判断当前字符串是否为关键字

bool isKey(string s){

//关键字数组

string keyArray【】 = {"int","char","string","void","bool","float","double","float","true","false","return",

"if","else","while","for","default","do","public","static","switch","case","include"};

//与当前字符串一一对比

for(unsigned int i=0;i[span class="hljs-built_in">sizeof(keyArray);i++){

if(s==keyArray【i】){

return true;

}//代码效果参考:http://www.ezhiqi.com/bx/art_7627.html

if("include"==keyArray【i】){

相关文章
|
17天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
8493 24
|
16天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
2876 14
|
15天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
2033 4
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
14天前
|
人工智能 编解码 并行计算
MiniMax-H3 一键整合包技术文档:8G 显存运行 AI 漫剧制作 —— 角色替换 / 动作迁移 / 文图生视频部署与调参指南
MiniMax H3 是 MiniMax 开源的全模态视频生成模型,支持文/图/音/视多条件输入,输出最高2K、15秒带双声道音频视频。本文档详述其Int8量化版在8GB显存下的本地一键部署、三段式工作流(EDIT/REPLACE/CONTINUE)、参数调优及常见问题排查。(239字)
|
10天前
|
人工智能 Linux 开发者
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
Codex是OpenAI推出的AI编程智能体,可读取本地项目、理解需求并自动修改代码。支持桌面GUI、命令行(CLI)及VS Code/Cursor插件三种形态,覆盖可视化操作、终端高效开发与编辑器无缝集成场景,助开发者用自然语言驱动编码全流程。(239字)
【2026国内使用】Codex安装过程一篇讲透(Win/Mac/Linux全支持)
|
4天前
|
人工智能 JSON Linux
【全网最详细】ComfyUI使用教程:下载+本地部署+配置+工作流搭建一篇搞定(2026最新版)
ComfyUI是一款免费开源的本地AI绘图工具,采用节点式工作流设计,支持文生图、图生图、局部重绘、放大、换脸等多种功能。可离线运行,依赖显卡加速,无需联网。支持自定义流程保存与分享,插件生态丰富,适合进阶用户。(239字)
|
10天前
|
人工智能 JSON 编解码
【2026最新版】ComfyUI本地部署教程,新手也能看懂!
ComfyUI是本地运行的AI绘画工具,采用节点式工作流设计:通过拖拽连接“加载模型”“提示词编码”“采样”“解码”等模块,实现高度可控的文生图。新手推荐使用秋叶整合包,一键启动、内置模型管理与插件安装器,轻松上手。(239字)

热门文章

最新文章