用python写,编写一个程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。 程序应检查输入源程序中左右大括号、小括号的个数是否相等,并且符合C语言语法规定的括号嵌套规则,不得交叉嵌套。输入文件最长不超过500个字符。 本程序只检查括号是否匹配,不用对输入源程序中的其它语法成份进行检查。 【输入文件】 输入文件为当前目录下的check.in,是一段任意的C程序。 【输出文件】 输出文件为当前目录下的check.out。该文件只有一行,是一个单词"True"或"False"。如果没有括号匹配错误则输出"True",否则输出"False"。
时间: 2024-01-22 19:18:10 浏览: 96
以下是一个简单的Python程序,用于对C源程序进行括号匹配检查,并将检查结果输出到文件中。
```python
# 打开输入文件,读取源程序
with open('check.in', 'r') as f:
code = f.read()
# 检查左右大括号、小括号的个数是否相等
if code.count('{') != code.count('}') or code.count('(') != code.count(')'):
with open('check.out', 'w') as f:
f.write('False')
else:
# 检查括号嵌套规则,不得交叉嵌套
stack = []
for char in code:
if char in ['{', '(']:
stack.append(char)
elif char in ['}', ')']:
if not stack:
with open('check.out', 'w') as f:
f.write('False')
break
elif char == '}' and stack[-1] == '{':
stack.pop()
elif char == ')' and stack[-1] == '(':
stack.pop()
else:
with open('check.out', 'w') as f:
f.write('False')
break
else:
if not stack:
with open('check.out', 'w') as f:
f.write('True')
else:
with open('check.out', 'w') as f:
f.write('False')
```
该程序首先读取输入文件中的源程序,然后检查左右大括号、小括号的个数是否相等。如果不相等,则直接输出"False"。如果相等,则使用栈来检查括号嵌套规则。
具体来说,程序遍历源程序中的每个字符,如果是左括号就将其压入栈中,如果是右括号就从栈顶弹出一个左括号,并检查它们是否匹配。如果不匹配,则直接输出"False"。如果遍历完整个源程序后栈为空,则输出"True",否则输出"False"。最后将检查结果写入输出文件中。
阅读全文