Python开发自定义语言解释器时字符串f无法拼接始终为空
故障原因
- 核心逻辑错误:变量名字符判断误用了
istitle()方法。该方法仅当字符串满足「首字母大写、其余字母小写」的标题格式时返回True,单个小写字母、全小写字符串调用时均返回False。你的测试用例中变量名val为全小写,所有字符都无法通过判断条件,拼接逻辑始终不触发,存储变量名的f自然一直是空字符串。你在判断条件前加print(lines[k][i])能正常输出对应位置字符,是因为打印语句在判断分支外侧,不受条件匹配失败的影响。 - 边界逻辑缺失:通过
readlines()读取的代码行默认保留末尾换行符\n,且提取变量名时没有遇到右括号)即终止遍历的逻辑,后续扩展语法时容易出现异常匹配问题。
修复方法
- 将错误的
istitle()替换为isalpha()匹配字母字符,若需要支持下划线命名规则,额外增加对下划线_的判断。 - 在变量名提取循环中增加终止条件:遇到右括号
)时直接跳出循环,避免读取无关字符。 - (可选优化)读取代码文件后对每行做首尾空白裁剪,减少换行、首尾空格带来的边界判断成本。
修复后的故障块代码
if conformation == 1: for i in range(l, len(lines[k]), 1): current_char = lines[k][i] # 遇到右括号直接终止变量名提取 if current_char == ")": break # 匹配合法变量名字符:字母、数字、下划线 if current_char.isdigit() or current_char.isalpha() or current_char == "_": f += current_char if f in var: print(var[f])
替换后运行解释器读取测试代码,即可正常输出变量val存储的值hello。
内容的提问来源于stack exchange,提问作者Tech Zachary ZN
相关产品推荐
相关产品推荐

