AI开发C语言应用按步走,表达式计算器calc的第十七步,历史记录、复合赋值、自增自减、条件表达式
calc17 — 历史记录、复合赋值、自增自减、条件表达式1. 概述本次迭代实现了四个新功能来自 features.md 中的 G1~G4 建议大幅提升 REPL 交互体验和表达式表达能力。新增功能编号功能说明G1REPL 历史记录history命令、!n重复执行、文件持久化G2复合赋值运算符-*/%|^G3自增/自减--前缀和后缀形式G4条件表达式C 风格?:三元运算符2. 变更清单文件操作说明hist.h新建历史记录模块 APIhist_add/hist_get/hist_print/hist_save/hist_loadhist.c新建环形缓冲区100 条~/.calc_history文件持久化parse.h编辑TokenType 新增 14 个INC/DEC/QUESTION/COLON 10 个复合赋值运算符parse.c重写多字符运算符检测---等 20 个--后跟数字时回退为负号eval.c编辑新增parse_conditional层unary增加前缀/--factor增加后缀/--main.c编辑历史记录集成history/!n/自动保存复合赋值处理is_assignment扩展print_help更新Makefile编辑SRC/HDR/OBJ加入hist.c/hist.h/hist.otest.expr编辑新增 6 个条件表达式测试用例总数 106→1123. G1 — REPL 历史记录3.1 环形缓冲区#defineHIST_MAX100staticcharhist_buffer[HIST_MAX][128];staticinthist_num;staticinthist_head;3.2 命令命令说明history显示所有历史记录#1 expr格式!n重新执行第 n 条历史记录3.3 文件持久化启动时从~/.calc_history加载历史退出时自动保存到~/.calc_history去重连续相同的不重复记录4. G2 — 复合赋值运算符4.1 新增 TokenToken运算符运算TOKEN_PLUS_ASSIGNx 5→x x 5TOKEN_MINUS_ASSIGN-x - 5→x x - 5TOKEN_STAR_ASSIGN*x * 5→x x * 5TOKEN_SLASH_ASSIGN/x / 5→x x / 5TOKEN_MOD_ASSIGN%x % 5→x x % 5TOKEN_AND_ASSIGNx 5→x x 5TOKEN_OR_ASSIGN|x | 5→x x | 5TOKEN_XOR_ASSIGN^x ^ 5→x x ^ 54.2 实现在main.c的is_assignment中检测name expr模式apply_compound函数执行复合运算staticdoubleapply_compound(doubleleft,doubleright,TokenType op){switch(op){caseTOKEN_PLUS_ASSIGN:returnleftright;caseTOKEN_MINUS_ASSIGN:returnleft-right;caseTOKEN_STAR_ASSIGN:returnleft*right;// ...}}5. G3 — 自增/自减5.1 前缀形式在parse_unary中处理x和--xcalc x 5 calc x 6先修改变量值再返回新值。5.2 后缀形式在parse_factor中处理x和x--calc x 5 calc x 5 calc x 6先返回旧值再修改变量值。5.3 特殊处理--5被正确解析为双重负号-(-5) 5而非对字面量的自减操作。6. G4 — 条件表达式6.1 文法conditional → or (? expr : conditional)?6.2 优先级条件表达式位于expr和expr_or之间优先级仅高于||。6.3 求值staticdoubleparse_conditional(void){doublecondparse_or();Token tparse_peek();if(t.typeTOKEN_QUESTION){parse_consume();doubletrue_valparse_expr();expect(TOKEN_COLON);doublefalse_valparse_conditional();return(cond!0.0)?true_val:false_val;}returncond;}6.4 示例calc 1 2 ? 3 : 4 3 calc a b ? a : b 条件最大值7. 测试验证$maketestcalc — 测试套件PASS[1](90-18)/315 →39... PASS[107]1?2:3 →2PASS[108]0?2:3 →3PASS[109]12?3:4 →3PASS[110]true?1:0 →1PASS[111]false?1:0 →0PASS[112]1?2 → error112passed,0failed,112total

相关新闻

Redisson布隆过滤器并发难题:5个实战方案教你构建高可用分布式过滤系统

Redisson布隆过滤器并发难题:5个实战方案教你构建高可用分布式过滤系统

Redisson布隆过滤器并发难题:5个实战方案教你构建高可用分布式过滤系统 【免费下载链接】redisson Redisson: Valkey & Redis Java Client and Real-Time Data Platform. Sync/Async/RxJava/Reactive API. Over 50 Valkey and Redis based Java objects and ser…

2026/7/26 11:23:21 阅读更多 →
Linux存储设备管理与分区技术详解

Linux存储设备管理与分区技术详解

1. Linux存储设备基础认知刚接触Linux系统的朋友第一次用fdisk -l命令时,可能会被那些/dev/sda、/dev/sdb1之类的设备名搞得一头雾水。这些看似神秘的命名其实遵循着非常清晰的规则,理解这些规则是掌握Linux存储管理的第一步。在Linux的视角里&#xff0…

2026/7/26 11:23:21 阅读更多 →
Linux文件共享:smbd服务配置与安全实践

Linux文件共享:smbd服务配置与安全实践

1. 理解smbd服务的核心价值在Linux系统中,文件共享是网络管理的基础需求之一。smbd作为Samba套件的核心组件,实现了Windows与Linux/Unix系统之间的文件与打印服务共享。不同于简单的FTP传输,smbd支持完整的SMB/CIFS协议栈,能够无缝…

2026/7/26 11:23:21 阅读更多 →

最新新闻

【Linux系统编程】进程的优先级

【Linux系统编程】进程的优先级

优先级概念:cpu资源分配的先后顺序 为什么会有优先级?因为资源有限,如果是单核系统,也就是只有一个CPU,它要处理多个进程的话,就必须要按照一定的顺序。 优先级的特点: ps -al $显示进程 ls…

2026/7/26 11:31:24 阅读更多 →
异构计算架构革命:从硬件革新到软件范式转移

异构计算架构革命:从硬件革新到软件范式转移

1. 演讲背景与核心观点解析 2026年CES展会上的这场主题演讲,标志着计算架构发展史上的一个重要转折点。演讲者以"旧世界,裂开了!"这个充满冲击力的标题,直指传统计算范式正在发生的根本性变革。作为从业十五年的技术观察…

2026/7/26 11:31:24 阅读更多 →
XDS510仿真器接口设计:时序计算与EMU引脚配置实战指南

XDS510仿真器接口设计:时序计算与EMU引脚配置实战指南

1. 项目概述:XDS510仿真器设计的核心挑战在嵌入式系统,尤其是基于TI DSP的开发过程中,仿真器是连接开发环境与目标硬件的生命线。它不仅仅是下载代码的工具,更是我们窥探芯片内部运行状态、实时追踪变量、设置断点、进行性能剖析的…

2026/7/26 11:31:24 阅读更多 →
C语言--文件操作

C语言--文件操作

目录 一,认识文件 1,文件名: 2,两种文件 二,文件操作 1,认识流和标准流 2,文件指针 3,文件的打开与关闭 三,文件的顺序读写 1,fputc和fgetc 2&#…

2026/7/26 11:31:24 阅读更多 →
如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南

如何在3分钟内免费激活Windows系统:KMS_VL_ALL_AIO完整指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗?每次开机看到那个烦人的激活提…

2026/7/26 11:31:24 阅读更多 →
TMS320C6474 DSP中断系统深度解析:从事件路由到多核优化实践

TMS320C6474 DSP中断系统深度解析:从事件路由到多核优化实践

1. 中断控制器架构与核心设计思路在嵌入式DSP系统开发中,中断机制的设计直接决定了系统的实时响应能力和整体效率。TMS320C6474作为一款面向高性能计算和实时信号处理的三核DSP,其中断系统的复杂度远超普通的微控制器。我刚接触C6474时,面对手…

2026/7/26 11:30:24 阅读更多 →

日新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/26 0:00:31 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/26 0:00:31 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/26 0:00:31 阅读更多 →

月新闻