数学表达式递归下降解析器扩展函数支持时报列表索引越界错误
Python递归下降数学表达式解析器混合运算IndexError问题
已验证正常运行的功能
- 基础版本可正确处理整数、浮点数的常规四则运算
- Token扫描模块可正常将输入字符串转换为形如
[5.0, '+', ...]的结构化token列表 - 无内置函数的表达式可正确生成抽象语法树,输出准确的求值结果
- 单函数嵌套表达式可正常解析,典型可运行样例为
cbrt( 4*3-4 )
异常触发条件
在扩展log、ln、sqrt、cbrt类内置函数支持后,只要输入包含多元素混合运算表达式,程序就会抛出IndexError: list index out of range。
可稳定复现的输入样例包括:
cbrt( 8 )+ log( 10 )5+sqrt( 4 )3*log( 4-9 )sqrt( 4 ) - ln( 2.7 )
报错定位信息
异常栈显示,错误触发于power函数内判断a[i] == '^'的代码行。
已完成的代码模块范围
目前已搭建完完整的解析链路,覆盖全部以下模块:
- 递归下降解析逻辑:
expect_token、atom、power、negation、multiplication、addition、expression、抽象语法树生成逻辑 - 辅助能力模块:
scan词法扫描函数、evaluate求值函数、算子调度表、内置函数支持列表
当前诉求
定位代码缺陷的具体位置,获取可直接落地的修复方案。
内容的提问来源于stack exchange,提问作者Leo
相关产品推荐
相关产品推荐

