无符号数的词法分析与处理程序
5星 · 超过95%的资源 需积分: 10 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)`是计算公式。
这个程序实现了对无符号数(浮点数或整数)的词法分析,能处理基本的数字格式,并在遇到错误时进行错误恢复。
2009-11-29 上传
2010-01-04 上传
点击了解资源详情
2023-04-03 上传
2008-06-17 上传
2008-07-02 上传
2023-04-15 上传
2011-05-01 上传