无符号数的词法分析与处理程序

5星 · 超过95%的资源 需积分: 10 58 下载量 26 浏览量 更新于2024-12-28 4 收藏 33KB DOC 举报
"无符号数的词法分析程序" 该程序是一个用于解析无符号数的词法分析器,主要用于处理浮点数和整数的输入。程序通过一系列的函数来检查、处理数字的不同部分,包括整数部分、小数部分和指数部分。以下是程序的关键知识点: 1. **输入处理**: - 用户被要求输入一个识别符,这个识别符可能是浮点数或整数。 - 输入的字符串存储在`data`数组中,最大长度由常量`N`定义(40个字符)。 2. **变量定义**: - `w`(尾数累加器):存储整数部分和小数部分的数值。 - `p`(指数累加器):存储指数值。 - `j`(十进制小数位数计数器):记录小数部分的位数。 - `e`(指数符号):记录指数的正负。 - `i`(元素位置):跟踪处理的位置。 - `d`(数值元素):临时存储单个数字字符的值。 - `is_digit`(标志):标记当前字符是否为数字。 - `CJ1`(字符串):存储识别出的类型(整型或实型)。 - `CJ2`(双精度浮点数):存储解析后的数值。 3. **关键函数**: - `check(char c)`:检查输入的第一个字符是否为数字,如果不是则要求重新输入。 - `deal_integer(char c)`:处理整数部分,将字符转换为数值并累加到`w`。 - `deal_point(char c)`:处理小数点后的数字,计算小数部分的位数。 - `deal_index(char c)`:处理指数部分,确定指数的正负和值。 - `s_next()` 和 `z_next()`:分别确定输入是实型(浮点数)还是整型。 - `last()`:计算最终的数值`CJ2`。 - `error()`:错误处理函数,重新输入数据并重置全局变量。 - `deal()`:处理函数主体,根据输入调用其他函数进行解析。 4. **流程控制**: - 主函数`main()`中,先提示用户输入,然后调用`deal()`处理输入,最后输出解析结果。 - 在`deal()`中,首先检查首字符,然后处理整数部分,如果遇到小数点则处理小数部分,如果遇到'e'或'E'则处理指数部分。整个过程中,根据输入的合法性调用其他辅助函数。 5. **错误处理**: - 当输入不符合数字格式时,`error()`函数会显示错误信息,并要求重新输入。 6. **计算逻辑**: - `last()`函数根据`w`、`p`、`e`和`j`的值计算出最终的浮点数值`CJ2`,其中`w*pow((double)10, e*p-j)`是计算公式。 这个程序实现了对无符号数(浮点数或整数)的词法分析,能处理基本的数字格式,并在遇到错误时进行错误恢复。