用python实现: 【问题描述】 编写一个程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。 程序应检查输入源程序中左右大括号、小括号的个数是否相等,并且符合C语言语法规定的括号嵌套规则,不得交叉嵌套。输入文件最长不超过500个字符。 本程序只检查括号是否匹配,不用对输入源程序中的其它语法成份进行检查。 【输入文件】 输入文件为当前目录下的check.in,是一段任意的C程序。 【输出文件】 输出文件为当前目录下的check.out。该文件只有一行,是一个单词"True"或"False"。如果没有括号匹配错误则输出"True",否则输出"False"。 【样例输入】 输入文件check.in的内容如下: static void PrintArr (int *p) { int i = 0; while (*(p+i)) printf ("%4d", *(p + i)); i++; } printf ("\r\n"); return; } 【样例输出】 输出文件check.out内容如下: False 【样例说明】 在输入的源程序中,while语句缺少一个左大括号,输出为False。
时间: 2023-12-30 18:03:14 浏览: 69
以下是Python实现代码:
```python
def check(src):
# 括号匹配检查函数
stack = []
for i, c in enumerate(src):
if c in "({[":
stack.append((c, i))
elif c in ")}]":
if not stack:
return False, i
left, j = stack.pop()
if (left == "(" and c != ")") or (left == "{" and c != "}") or (left == "[" and c != "]"):
return False, j
if stack:
return False, stack[-1][1]
return True, -1
if __name__ == '__main__':
# 读取输入文件
with open("check.in", "r") as f:
src = f.read().strip()
# 进行括号匹配检查
is_match, pos = check(src)
# 输出结果到输出文件
with open("check.out", "w") as f:
if is_match:
f.write("True")
else:
f.write("False")
print("括号匹配错误位置:", pos) # 可选,输出错误位置
```
其中,`check()`函数用于进行括号匹配检查,返回一个布尔值和一个错误位置,如果布尔值为`True`则表示括号匹配正确,否则表示括号匹配错误,错误位置则指示了第一个不匹配的括号的位置。
在主函数中,首先读取输入文件中的源程序,然后调用`check()`函数进行括号匹配检查,最后将结果输出到输出文件中。如果发现括号匹配错误,则可选地输出错误位置。
阅读全文