|
1
|
|
|
#!/usr/bin/env python |
|
2
|
|
|
|
|
3
|
|
|
import argparse |
|
4
|
|
|
from pyfranca import Processor, LexerException, ParserException, \ |
|
5
|
|
|
ProcessorException |
|
6
|
|
|
|
|
7
|
|
|
|
|
8
|
|
|
def dump_comments(item, prefix): |
|
9
|
|
|
for key, value in item.comments.items(): |
|
10
|
|
|
print (prefix + key + ": " + value) |
|
11
|
|
|
|
|
12
|
|
|
|
|
13
|
|
|
def dump_namespace(namespace): |
|
14
|
|
|
if namespace.typedefs: |
|
15
|
|
|
print("\t\tTypedefs:") |
|
16
|
|
|
for item in namespace.typedefs.values(): |
|
17
|
|
|
print("\t\t- {} is {}".format(item.name, item.type.name)) |
|
18
|
|
|
dump_comments(item, "\t\t\t") |
|
19
|
|
|
if namespace.enumerations: |
|
20
|
|
|
print("\t\tEnumerations:") |
|
21
|
|
|
for item in namespace.enumerations.values(): |
|
22
|
|
|
print("\t\t- {}".format(item.name)) |
|
23
|
|
|
dump_comments(item, "\t\t\t") |
|
24
|
|
|
if namespace.structs: |
|
25
|
|
|
print("\t\tStructs:") |
|
26
|
|
|
for item in namespace.structs.values(): |
|
27
|
|
|
print("\t\t- {}".format(item.name)) |
|
28
|
|
|
dump_comments(item, "\t\t\t") |
|
29
|
|
|
if namespace.arrays: |
|
30
|
|
|
print("\t\tArrays:") |
|
31
|
|
|
for item in namespace.arrays.values(): |
|
32
|
|
|
print("\t\t- {}".format(item.name)) |
|
33
|
|
|
dump_comments(item, "\t\t\t") |
|
34
|
|
|
if namespace.maps: |
|
35
|
|
|
print("\t\tMaps:") |
|
36
|
|
|
for item in namespace.maps.values(): |
|
37
|
|
|
print("\t\t- {}".format(item.name)) |
|
38
|
|
|
dump_comments(item, "\t\t\t") |
|
39
|
|
|
|
|
40
|
|
|
|
|
41
|
|
|
def dump_interface(interface): |
|
42
|
|
|
if interface.attributes: |
|
43
|
|
|
print("\t\tAttributes:") |
|
44
|
|
|
for item in interface.attributes.values(): |
|
45
|
|
|
print("\t\t- {}".format(item.name)) |
|
46
|
|
|
dump_comments(item, "\t\t\t") |
|
47
|
|
|
if interface.methods: |
|
48
|
|
|
print("\t\tMethods:") |
|
49
|
|
|
for item in interface.methods.values(): |
|
50
|
|
|
print("\t\t- {}()".format(item.name)) |
|
51
|
|
|
dump_comments(item, "\t\t\t") |
|
52
|
|
|
if interface.broadcasts: |
|
53
|
|
|
print("\t\tBroadcasts:") |
|
54
|
|
|
for item in interface.broadcasts.values(): |
|
55
|
|
|
print("\t\t- {}".format(item.name)) |
|
56
|
|
|
dump_comments(item, "\t\t\t") |
|
57
|
|
|
dump_namespace(interface) |
|
58
|
|
|
|
|
59
|
|
|
|
|
60
|
|
|
def dump_package(package): |
|
61
|
|
|
print("- {} ({})".format(package.name, str.join(", ", package.files))) |
|
62
|
|
|
dump_comments(package, "\t") |
|
63
|
|
|
if package.imports: |
|
64
|
|
|
print("\tImports:") |
|
65
|
|
|
for imp in package.imports: |
|
66
|
|
|
print("\t- {} from {}".format(imp.namespace, imp.file)) |
|
67
|
|
|
if package.interfaces: |
|
68
|
|
|
print("\tInterfaces:") |
|
69
|
|
|
for interface in package.interfaces.values(): |
|
70
|
|
|
if interface.version: |
|
71
|
|
|
version_str = " (v{})".format(interface.version) |
|
72
|
|
|
else: |
|
73
|
|
|
version_str = "" |
|
74
|
|
|
print("\t- {}{}".format(interface.name, version_str)) |
|
75
|
|
|
dump_comments(interface, "\t\t") |
|
76
|
|
|
dump_interface(interface) |
|
77
|
|
|
if package.typecollections: |
|
78
|
|
|
print("\tType collections:") |
|
79
|
|
|
for typecollection in package.typecollections.values(): |
|
80
|
|
|
if typecollection.version: |
|
81
|
|
|
version_str = " (v{})".format(typecollection.version) |
|
82
|
|
|
else: |
|
83
|
|
|
version_str = "" |
|
84
|
|
|
print("\t- {}{}".format(typecollection.name, version_str)) |
|
85
|
|
|
dump_comments(typecollection, "\t\t") |
|
86
|
|
|
dump_namespace(typecollection) |
|
87
|
|
|
|
|
88
|
|
|
|
|
89
|
|
|
def dump_packages(packages): |
|
90
|
|
|
print("Packages:") |
|
91
|
|
|
for package in packages.values(): |
|
92
|
|
|
dump_package(package) |
|
93
|
|
|
|
|
94
|
|
|
|
|
95
|
|
|
def parse_command_line(): |
|
96
|
|
|
parser = argparse.ArgumentParser( |
|
97
|
|
|
description="Behavioral cloning model trainer.") |
|
98
|
|
|
parser.add_argument( |
|
99
|
|
|
"fidl", nargs="+", |
|
100
|
|
|
help="Input FIDL file.") |
|
101
|
|
|
parser.add_argument( |
|
102
|
|
|
"-I", "--import", dest="import_dirs", metavar="import_dir", |
|
103
|
|
|
action="append", help="Model import directories.") |
|
104
|
|
|
args = parser.parse_args() |
|
105
|
|
|
return args |
|
106
|
|
|
|
|
107
|
|
|
|
|
108
|
|
|
def main(): |
|
109
|
|
|
args = parse_command_line() |
|
110
|
|
|
|
|
111
|
|
|
processor = Processor() |
|
112
|
|
|
if args.import_dirs: |
|
113
|
|
|
processor.package_paths.extend(args.import_dirs) |
|
114
|
|
|
|
|
115
|
|
|
try: |
|
116
|
|
|
for fidl in args.fidl: |
|
117
|
|
|
processor.import_file(fidl) |
|
118
|
|
|
except (LexerException, ParserException, ProcessorException) as e: |
|
119
|
|
|
print("ERROR: {}".format(e)) |
|
120
|
|
|
exit(1) |
|
121
|
|
|
|
|
122
|
|
|
dump_packages(processor.packages) |
|
123
|
|
|
|
|
124
|
|
|
|
|
125
|
|
|
if __name__ == "__main__": |
|
126
|
|
|
main() |
|
127
|
|
|
|