python编写一程序,抽取一个C程序的控制流串。要求只考虑if, else, for, while, switch, case等控制流关键字,其它控制流不被考虑。被处理的C程序满足: 1. 能够通过C编译; 2. 一行可能有多条语句; 3. 注释、字符串常量及其它标识符中不含控制流关键字串;
时间: 2024-02-25 16:55:43 浏览: 107
以下是一个实现该功能的Python程序:
```python
import re
# 读取输入文件
with open('input.c', 'r') as f:
content = f.read()
# 提取if, else, for, while, switch, case关键字
keywords = ['if', 'else', 'for', 'while', 'switch', 'case']
pattern = '|'.join(keywords)
regex = re.compile(r'\b(' + pattern + r')\b')
# 提取控制流串
control_flow = []
for line in content.splitlines():
# 去掉注释
line = re.sub(r'//.*|/\*[\s\S]*?\*/', '', line)
# 提取控制流关键字
keywords = regex.findall(line)
# 如果该行含有控制流关键字,则将其加入控制流串中
if keywords:
control_flow += keywords
# 输出控制流串
print(control_flow)
```
该程序首先使用正则表达式提取if, else, for, while, switch, case关键字,并将它们拼接成一个正则表达式。然后,对于输入程序的每一行,程序使用正则表达式去掉其中的注释,并提取其中的控制流关键字。如果该行含有控制流关键字,则将其加入控制流串中。最后,程序输出控制流串。
需要注意的是,该程序只能提取不包含在注释、字符串常量及其它标识符中的控制流关键字串。如果存在这些情况,该程序需要进行修改。
阅读全文