用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。 (current) 草稿箱 1 控制台
时间: 2024-01-08 07:01:59 浏览: 57
Calculator_TkInter:程序不可用
可以使用栈来实现括号匹配检查。遍历源程序中每一个字符,如果是左括号则入栈,如果是右括号则判断栈顶元素是否与之匹配,如果匹配则出栈,否则返回False。最后需要判断栈是否为空,如果为空则说明所有括号都匹配,返回True,否则返回False。
下面是代码实现:
```python
def check_brackets(filename):
stack = []
with open(filename, 'r') as f:
content = f.read()
for i, c in enumerate(content):
if c in ['(', '{', '[']:
stack.append((c, i))
elif c in [')', '}', ']']:
if not stack:
return False, i
top, pos = stack.pop()
if (top == '(' and c != ')') or \
(top == '{' and c != '}') or \
(top == '[' and c != ']'):
return False, i
if stack:
return False, stack[-1][1]
return True, -1
if __name__ == '__main__':
result, pos = check_brackets('check.in')
with open('check.out', 'w') as f:
f.write(str(result))
if not result:
print(f"Bracket mismatch at position {pos}")
```
其中,`check_brackets`函数接收一个文件名作为参数,返回一个元组,第一个元素表示是否括号匹配,第二个元素表示最后一个不匹配的位置。最后需要根据返回值输出结果和位置信息。
阅读全文