Разобрать файл и создать структуру данных
Мы хотим проанализировать файл и создать какую-то структуру данных, которая будет использоваться позже (в Python). Содержимое файла выглядит следующим образом:
plan HELLO
feature A
measure X :
src = "Type ,Name"
endmeasure //X
measure Y :
src = "Type ,Name"
endmeasure //Y
feature Aa
measure AaX :
src = "Type ,Name"
"Type ,Name2"
"Type ,Name3"
endmeasure //AaX
measure AaY :
src = "Type ,Name"
endmeasure //AaY
feature Aab
.....
endfeature // Aab
endfeature //Aa
endfeature // A
feature B
......
endfeature //B
endplan
plan HOLA
endplan //HOLA
Итак, есть файл, который содержит один или несколько планов, а затем каждый план содержит одну или несколько функций, кроме того, каждая функция содержит меру, содержащую информацию (источник, тип, имя), а функция может дополнительно содержать больше функций.
Нам нужно проанализировать файл и создать структуру данных, которая бы имела
plan (HELLO)
------------------------------
↓ ↓
Feature A Feature B
---------------------------- ↓
↓ ↓ ↓ ........
Measure X Measure Y Feature Aa
------------------------------
↓ ↓ ↓
Measure AaX Measure AaY Feature Aab
↓
.......
Я пытаюсь проанализировать файл построчно и создать список списков, которые будут содержать план → функция → мера, функция
def getplans(s):
stack = [{}]
stack_list = []
for line in s.splitlines():
if ": " in line: # leaf
temp_stack = {}
key, value = line.split(": ", 1)
key = key.replace("source","").replace("=","").replace("\"","").replace(";","")
value = value.replace("\"","").replace(",","").replace(";","")
temp_stack[key.strip()] = value.strip()
stack_list.append(temp_stack)
stack[-1]["MEASURED_VAL"] = stack_list
elif line.strip()[:3] == "end":
stack.pop()
stack_list = []
elif line.strip():
collection, name, *_ = line.split()
stack.append({})
stack[-2].setdefault(collection, {})[name] = stack[-1]
return stack[0]