AI开发C语言应用按步走,表达式计算器calc的第十七步,历史记录、复合赋值、自增自减、条件表达式

发布时间:2026/7/26 11:24:32

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

相关新闻

FCC频谱拍卖技术解析:从5G部署到6G前瞻的通信资源管理

FCC频谱拍卖技术解析:从5G部署到6G前瞻的通信资源管理

2026/7/26 11:24:32

最近在关注通信行业的朋友可能注意到了,美国联邦通信委员会(FCC)即将启动新一轮的频谱拍卖。这让我想起了之前参与的一个跨国通信项目,当时频谱资源的配置直接影响了整个系统的架构设计。今天我们就来深入探讨一下频谱拍卖背后的技…

Codex GPT-Live语音与多项目管理功能实战配置指南

Codex GPT-Live语音与多项目管理功能实战配置指南

2026/7/26 11:24:32

最近在开发过程中,很多同学反馈希望AI助手能够支持语音交互和多项目管理功能。Codex最新推出的GPT-Live语音与多文件夹支持功能正好解决了这些痛点,本文将完整介绍这两个核心功能的配置使用全流程。 无论是前端开发者想要集成语音交互能力,还…

I2C总线协议详解:从电气特性到寄存器配置的嵌入式通信实践

I2C总线协议详解:从电气特性到寄存器配置的嵌入式通信实践

2026/7/26 11:24:32

1. I2C总线协议:从两根线到嵌入式通信的基石如果你玩过嵌入式开发,尤其是和传感器、EEPROM或者各种外设模块打交道,那你一定绕不开I2C。这玩意儿全称叫Inter-Integrated Circuit,中文常叫“集成电路总线”,但咱们工程师…

koa-views性能优化指南:提升模板渲染速度的5个实用技巧

koa-views性能优化指南:提升模板渲染速度的5个实用技巧

2026/7/26 12:24:36

koa-views性能优化指南:提升模板渲染速度的5个实用技巧 【免费下载链接】koa-views Template rendering middleware for koa (hbs, swig, pug, anything! :sparkles:) 项目地址: https://gitcode.com/gh_mirrors/ko/koa-views 在Node.js的Web开发领域&#x…

Gowid与urwid对比:为什么Go开发者更爱这款终端UI库?

Gowid与urwid对比:为什么Go开发者更爱这款终端UI库?

2026/7/26 12:24:36

Gowid与urwid对比:为什么Go开发者更爱这款终端UI库? 【免费下载链接】gowid Compositional widgets for terminal user interfaces, written in Go, inspired by urwid. 项目地址: https://gitcode.com/gh_mirrors/go/gowid Gowid是一款用Go语言编…

跨领域无监督异常检测技术解析与应用实践

跨领域无监督异常检测技术解析与应用实践

2026/7/26 12:24:36

1. 跨领域无监督异常检测的核心挑战 医疗CT影像中突然出现的肿瘤组织、生产线上的产品表面缺陷、服务器集群中的异常流量波动——这些看似毫不相关的场景,其实都面临着同一个核心问题:如何在缺乏标注样本的情况下,准确识别出偏离正常模式的异…

Unity海洋渲染实战指南:用Ceto打造次世代水面效果

Unity海洋渲染实战指南:用Ceto打造次世代水面效果

2026/7/26 12:24:36

Unity海洋渲染实战指南:用Ceto打造次世代水面效果 【免费下载链接】Ceto Ceto: Ocean system for Unity 项目地址: https://gitcode.com/gh_mirrors/ce/Ceto 你是否曾梦想在自己的游戏中实现电影级别的海洋效果?那种波光粼粼、浪花飞溅的真实感&a…

双机位面试技术解析与实战应对方案

双机位面试技术解析与实战应对方案

2026/7/26 12:24:36

1. 双机位面试技术解析与实战应对方案 最近两年远程面试场景出现了一个明显的技术趋势:双机位监考正在从少数企业的特殊要求,逐渐演变为行业标配。作为经历过上百场技术面试的面试官,我发现2023年采用双机位的企业比例已达67%,预计…

基于MA-DQL的多无人机协同通信网络优化实践

基于MA-DQL的多无人机协同通信网络优化实践

2026/7/26 12:14:36

1. 项目背景与核心价值 无人机通信网络作为新一代移动通信基础设施的重要组成部分,正在深刻改变传统地面基站的部署模式。在这个项目中,我们重点解决了一个关键问题:如何在动态环境中通过多无人机协作,实现分布式用户连接的最大化…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

[具身智能-649]:个人电脑搭建 RTSP 服务完整方案(Windows / Ubuntu 双平台,适配 RDK X5 rtsp2display 调试)

2026/7/26 0:04:02

目标:电脑作为RTSP 服务端,循环推送 H264/H265 视频流; RDK X5 通过 rtsp2display 拉流预览,完全不需要在开发板编译 live555。 提供两套成熟方案: ✅ 方案 A:FFmpeg(最简单,优先推…

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

2026/7/26 0:04:02

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

PDF拆分压完图糊了?2026国内免费实测,档案员都在用的组合方案

2026/7/26 0:04:02

说实话,提到PDF拆分再压缩,我真是被折腾得够呛。 上个月公司年度合同归档,一份300多页的PDF总合同,需要按年份拆分成三个独立文件,再分别压缩到10MB以内方便邮件发送各部门确认。我心想这还不简单?先找个海…