xref: /llvm-project/clang/utils/analyze_safe_buffer_debug_notes.py (revision a4323586fcbb20f39f00d5d1bc4a94a1aeea15c4)
1*a4323586Sziqingluo-90import sys
2*a4323586Sziqingluo-90from collections import OrderedDict
3*a4323586Sziqingluo-90
4*a4323586Sziqingluo-90class Trie:
5*a4323586Sziqingluo-90    def __init__(self, name):
6*a4323586Sziqingluo-90        self.name = name
7*a4323586Sziqingluo-90        self.children = OrderedDict()
8*a4323586Sziqingluo-90        self.count = 1
9*a4323586Sziqingluo-90
10*a4323586Sziqingluo-90    def add(self, name):
11*a4323586Sziqingluo-90        if name in self.children:
12*a4323586Sziqingluo-90            self.children[name].count += 1
13*a4323586Sziqingluo-90        else:
14*a4323586Sziqingluo-90            self.children[name] = Trie(name)
15*a4323586Sziqingluo-90        return self.children[name]
16*a4323586Sziqingluo-90
17*a4323586Sziqingluo-90    def print(self, depth):
18*a4323586Sziqingluo-90        if depth > 0:
19*a4323586Sziqingluo-90            print('|', end="")
20*a4323586Sziqingluo-90        for i in range(depth):
21*a4323586Sziqingluo-90            print('-', end="")
22*a4323586Sziqingluo-90        if depth > 0:
23*a4323586Sziqingluo-90            print(end=" ")
24*a4323586Sziqingluo-90        print(self.name, '#', self.count)
25*a4323586Sziqingluo-90        for key, child in self.children.items():
26*a4323586Sziqingluo-90            child.print(depth + 1)
27*a4323586Sziqingluo-90
28*a4323586Sziqingluo-90
29*a4323586Sziqingluo-90Root = Trie("Root")
30*a4323586Sziqingluo-90
31*a4323586Sziqingluo-90if __name__ == "__main__":
32*a4323586Sziqingluo-90    for line in sys.stdin:
33*a4323586Sziqingluo-90        words = line.split('==>')
34*a4323586Sziqingluo-90        words = [word.strip() for word in words]
35*a4323586Sziqingluo-90        MyTrie = Root;
36*a4323586Sziqingluo-90        for word in words:
37*a4323586Sziqingluo-90            MyTrie = MyTrie.add(word)
38*a4323586Sziqingluo-90
39*a4323586Sziqingluo-90    Root.print(0)
40