AI开发C语言应用按步走,表达式计算器calc的第一步,中缀表达式词法分析

发布时间:2026/9/14 20:57:19

AI开发C语言应用按步走,表达式计算器calc的第一步,中缀表达式词法分析 calc1 — 中缀表达式词法分析器1. 项目概述构建一个 C 语言中缀表达式词法分析器tokenizer将中缀表达式字符串拆分为独立的 token 序列包括数字、四则运算符和圆括号。输入示例(90-18)/315输出示例( LEFT_PAREN 90 NUMBER - MINUS 18 NUMBER ) RIGHT_PAREN / SLASH 3 NUMBER PLUS 15 NUMBER2. 目录结构calc/ ├── Makefile # 构建脚本gcc -Wall -Wextra -stdc99 -pedantic ├── parse.h # 头文件TokenType 枚举、Token 结构体、API 声明 ├── parse.c # 词法分析器实现 ├── main.c # 入口程序输入源选择 解析打印 └── build/ ├── calc # 可执行文件 ├── parse.o # 编译目标文件 └── main.o # 编译目标文件3. 文件说明3.1 parse.h定义三个核心类型和三个 API 函数TokenType 枚举枚举值对应字符说明TOKEN_NUMBER—整数字面量TOKEN_PLUS加号TOKEN_MINUS-减号TOKEN_STAR*乘号TOKEN_SLASH/除号TOKEN_LPAREN(左括号TOKEN_RPAREN)右括号TOKEN_END—输入结束TOKEN_ERROR—非法字符Token 结构体typedefstruct{TokenType type;// token 类型intvalue;// 数值仅 TOKEN_NUMBER 有效intcol;// 在输入字符串中的列号1-based}Token;API 函数voidparse_init(constchar*input);// 初始化解析器Tokenparse_next(void);// 读取下一个 tokenconstchar*token_name(TokenType type);// 将类型转为可读字符串3.2 parse.c词法分析器实现采用静态状态机模式内部状态input_pos当前扫描游标、line行号保留、column列号1-basedparse_init将游标指向输入字符串起始位置重置行列号parse_next核心逻辑跳过空白字符isspace同步更新列号遇到\0→ 返回TOKEN_END遇到0-9→ 用strtol连续读入数字返回TOKEN_NUMBER遇到-*/()→ 返回对应类型其他字符 → 返回TOKEN_ERRORtoken_name将枚举值映射为可读字符串设计要点零动态内存分配纯游标扫描无需malloc。3.3 main.c入口程序分为两个函数parse_and_printstatic 函数staticintparse_and_print(constchar*input);职责空输入校验 →parse_init→ 循环调用parse_next打印每个 token → 遇到TOKEN_ERROR时输出错误位置并返回 1。main函数intmain(intargc,char*argv[]);职责输入源选择argv[1]优先否则从stdin读取→ 调用parse_and_print并返回其状态码。3.4 Makefile沿用项目中nslist/的构建风格C99 严格模式目标作用all编译生成build/calc可执行文件run运行build/calc需传入EXPR...clean删除build/目录编译选项-Wall -Wextra -stdc99 -pedantic -g -O24. 构建与运行# 编译$cdcalc $makemkdir-pbuild gcc-Wall-Wextra-stdc99-pedantic-g-O2-I.-cparse.c-obuild/parse.o gcc-Wall-Wextra-stdc99-pedantic-g-O2-I.-cmain.c-obuild/main.o gcc-Wall-Wextra-stdc99-pedantic-g-O2build/parse.o build/main.o-obuild/calc# 命令行参数运行$ ./build/calc(90-18)/315# 管道输入运行$echo(90-18)/315|./build/calc# 通过 Makefile 运行$makerunEXPR(90-18)/315# 清理$makeclean5. 测试验证5.1 基本表达式$ ./build/calc(90-18)/315(LEFT_PAREN90NUMBER - MINUS18NUMBER)RIGHT_PAREN / SLASH3NUMBER PLUS15NUMBER5.2 带空格$ ./build/calc 3 5 3NUMBER PLUS5NUMBER5.3 非法字符$ ./build/calc353NUMBER PLUS col3: ERROR — illegal character5.4 空输入$ ./build/calcerror: empty input5.5 管道输入$echo10-2|./build/calc10NUMBER - MINUS2NUMBER6. 设计要点零动态内存分配词法分析器使用纯游标扫描不依赖malloc适合嵌入式或资源受限环境C99 严格模式编译启用-stdc99 -pedantic确保跨平台兼容列号定位每个 token 记录输入中的列号支持精确的错误位置报告模块分离parse.h/parse.c为纯词法分析模块main.c仅负责输入输出编排职责清晰两种输入方式支持命令行参数和标准输入管道方便脚本集成
延伸阅读

更多相关文章

2026/9/13 23:24:02

Python标准库核心模块详解与应用实践

1. Python模块学习概述作为一名Python开发者,掌握标准库中的核心模块是必备技能。本周我们将深入探讨Python中15个最常用的标准模块,这些模块涵盖了时间处理、随机数生成、系统操作、数据序列化、配置文件解析、加密算法、子进程管理等重要功能。这些模块…

2026/9/13 6:10:57

6.1 项目背景与需求分析(双语绘本速记单词智能体开发)

《扣子编程:从零开始搭建智能体 卢欣欣 清华大学出版社》【摘要 书评 试读】- 京东图书 《扣子编程:从零开始搭建智能体》全书案例持续更新-CSDN博客 6.1.1 业务场景描述 自2001年秋季开始,英语课程率先在城市及县城小学逐步落地&#xff…

2026/9/13 21:11:49

深入解析SPI多引脚模式与高级配置:从基础到MibSPI实战

1. 项目概述与核心价值 在嵌入式系统开发中,串行外设接口(SPI)是连接微控制器与各类传感器、存储器和显示模块的“血管”。它简单、高效,一个时钟加两根数据线就能搞定通信,这是它最初吸引我的地方。但当你真正开始设计…

2026/9/14 20:55:30

Vue3双向绑定进阶:defineModel多变量与修饰符实战

1. Vue3双向绑定组件的核心价值与挑战双向绑定一直是Vue框架最标志性的特性之一。在Vue3中,随着Composition API的成熟和defineModel宏的引入,双向绑定的实现方式变得更加优雅和强大。但在实际开发中,我们经常会遇到需要处理多个绑定变量和自…

2026/9/14 20:55:30

2026届科研必备:AI学术平台核心能力评测与应用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/14 20:55:30

OpenBB开源金融数据平台:架构解析与实战应用

1. OpenBB平台概述:金融数据的开源革命OpenBB正在重新定义金融数据分析的边界。这个完全开源的项目为分析师、量化交易员和AI开发者提供了一个统一的金融数据接入层。想象一下,你不再需要为每个数据源编写不同的API调用代码,不再需要处理五花…

2026/9/14 20:55:30

Excel高效数据处理与分析技巧全解析

1. Excel基础功能与核心价值解析Excel作为微软Office套件中的核心组件,已经发展成为数据处理和分析领域的标准工具。这款电子表格软件最初发布于1985年,经过三十多年的迭代进化,其功能已远远超出了简单的数据记录范畴。现代Excel集成了公式计…

2026/9/14 20:55:30

项目管理系统ROI计算中的五大收益高估陷阱

1. 项目管理系统ROI计算中的常见收益高估陷阱在评估项目管理系统的投资回报率时,很多企业会陷入"数字游戏"的误区。作为经历过数十个系统实施案例的从业者,我发现ROI计算中最容易被夸大的收益主要集中在以下五个方面:2. 最容易被高…

2026/9/14 2:17:50

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/14 0:03:22

KCF目标跟踪算法与OTB工程实现:毕业设计实战解析

简介:这是一份基于KCF核相关滤波算法、融合尺度池与抗遮挡处理的目标检测跟踪MATLAB完整源码,主要面向计算机相关专业准备毕业设计、课程设计或期末大作业的学生,也适合需要项目实战练习的初学者。源码在OTB数据集上完成验证,能够…

2026/9/14 0:03:22

语音情感识别实战:Keras实现LSTM、CNN、SVM与MLP多模型对比

简介:面向语音情感识别入门与进阶开发者,这份基于Keras的项目源码完整实现了LSTM、CNN、SVM、MLP四种模型,兼容Python3.8与Keras/TensorFlow2环境。压缩包内含49个文件,大小约70.31MB,主体包括Python脚本、yaml/json配…

2026/9/14 11:59:31

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/14 13:53:59

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/14 11:22:57

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码