AI开发C语言应用按步走,表达式计算器calc的第十五步,进制数字与位运算符

发布时间:2026/7/25 18:10:20

AI开发C语言应用按步走,表达式计算器calc的第十五步,进制数字与位运算符 calc15 —进制数字与位运算符1. 概述本次迭代新增了进制数字识别和位运算功能支持十六进制、八进制、二进制字面量以及 C 语言风格的位运算符。新增功能类别语法示例十六进制0x/0X前缀0xFF→ 255八进制0前缀后跟0-70777→ 511二进制0b/0B前缀0b1010→ 10按位与3 6→ 2按位或|3 | 6→ 7按位异或^3 ^ 6→ 5按位取反~~0→ -1左移1 3→ 8右移8 2→ 22. 变更清单文件操作说明parse.h编辑TokenType 新增 6 个类型BITNOT/BITAND/BITOR/BITXOR/SHL/SHR注释更新parse.c编辑进制数字识别strtol0x/0b/0前缀检测位运算符 token|^~update_expect/token_name更新eval.c重写新增 4 层语法层bitor/bitxor/bitand/shiftunary增加~分支test.expr编辑新增 12 个进制/位运算测试用例总数 58→703. 数字解析3.1 识别逻辑在parse_next中数字识别分支按优先级检查1. 0x / 0X → strtol(..., 16) 十六进制 2. 0b / 0B → strtol(..., 2) 二进制 3. 0 后跟 0-7 → strtol(..., 0) 八进制自动识别 4. 其他 → strtod 十进制 / 浮点3.2 示例0xFF→2550xff→2550b1010 →100777→511// 八进制0→0// 十进制零3.14→3.14// 浮点4. 位运算符4.1 新增 TokenToken运算符含义TOKEN_BITAND按位与TOKEN_BITOR|按位或TOKEN_BITXOR^按位异或TOKEN_BITNOT~按位取反一元TOKEN_SHL左移TOKEN_SHR右移4.2 多字符运算符优先级在parse_next中和在单字符之前检查和||在单字符\|之前检查多字符检查顺序 → ! → → → → → → || 单字符 fallback ! ~ | ^ ...5. 优先级体系5.1 完整优先级表从低到高优先级语法层运算符结合性1 (最低)expr_or||左结合2expr_and左结合3expr_bitor|左结合4expr_bitxor^左结合5expr_bitand左结合6expr_equality!左结合7expr_shift左结合8expr_relational左结合9expr_additive-左结合10expr_multiplicative*/%左结合11unary!~-右结合5.2 文法expr → expr_or expr_or → expr_and ((||) expr_and)* expr_and → expr_bitor (() expr_bitor)* expr_bitor → expr_bitxor ((|) expr_bitxor)* expr_bitxor → expr_bitand ((^) expr_bitand)* expr_bitand → expr_equality (() expr_equality)* expr_equality → expr_shift (( | !) expr_shift)* expr_shift → expr_relational (( | ) expr_relational)* expr_relational → expr_additive (( | | | ) expr_additive)* expr_additive → expr_multiplicative (( | -) expr_multiplicative)* expr_multiplicative → unary ((* | / | %) unary)* unary → (- | ! | ~) unary | factor factor → NUMBER | IDENTIFIER | TRUE | FALSE | ( expr )6. 测试验证$maketestcalc — 测试套件...(前58个测试用例)... PASS[59]0xFF →255PASS[60]0xff →255PASS[61]0b1010 →10PASS[62]0777 →511PASS[63]36→2PASS[64]3|6→7PASS[65]3^6 →5PASS[66]~0 →-1PASS[67]13→8PASS[68]82→2PASS[69]0xFF0x0F →15PASS[70]352→070passed,0failed,70total优先级验证表达式结果验证点3520优先于8 2 013232优先于1 5 32~010~优先于~0 -1,-1 1 0

相关新闻