Adding jpf.jar to enable the compilation of apps with the gov.nasa.jpf.vm.Verify...
[smartthings-infrastructure.git] / Extractor / ExtractorScript.py
1 import os
2 readyToReturn = 0
3 ToReturn = ""
4
5 def GetToken(f):
6         global readyToReturn
7         global ToReturn
8         Skip = ['\n', '\t', ' ']
9         Special = ["(", "\"", ":", ",", "{", "}", ")", "/", "*"]
10         S = ""
11         if (readyToReturn):
12                 readyToReturn = 0
13                 return ToReturn
14         ToReturn = ""
15         c = f.read(1)
16         while(True):
17                 if (c in Special):
18                         if (S != ""):
19                                 readyToReturn = 1
20                                 ToReturn = c
21                                 return S
22                         else:
23                                 return c
24                 elif (c in Skip):
25                         if (S != ""):
26                                 return S        
27                         else:
28                                 c = f.read(1)
29                                 continue
30                 S += c
31                 c = f.read(1)
32                 if not c:
33                         return "EOF"
34
35 def ExtractFunctions(F, appName):
36         Temp = GetToken(F)
37         while (Temp != "EOF"):
38                 if (Temp == "def" or Temp == "private"):
39                         Temp = GetToken(F)
40                         NameofFunc = Temp
41                         if (GetToken(F) != "="): #We have a function to create object for
42                                 if (appName == "App1"):
43                                         extractedFunctionsApp1.write("//Global Object for functions in subscribe method!\n")    
44                                         extractedFunctionsApp1.write("def %s = this.&" % NameofFunc)
45                                         extractedFunctionsApp1.write("%s\n" % NameofFunc)
46                                 else:
47                                         extractedFunctionsApp2.write("//Global Object for functions in subscribe method!\n")    
48                                         extractedFunctionsApp2.write("def %s = this.&" % NameofFunc)
49                                         extractedFunctionsApp2.write("%s\n" % NameofFunc)
50                 Temp = GetToken(F)
51                 
52
53
54 #Extract objects to call functions from App1
55 F1 = open("Extractor/App1/App1.groovy", "r")
56 extractedFunctionsApp1 = open("Extractor/App1/extractedFunctionsApp1.groovy", "w+")
57 ExtractFunctions(F1, "App1")
58 F1.close()
59
60 #Extract objects to call functions from App2
61 F2 = open("Extractor/App2/App2.groovy", "r")
62 extractedFunctionsApp2 = open("Extractor/App2/extractedFunctionsApp2.groovy", "w+")
63 ExtractFunctions(F2, "App2")
64 F2.close()
65
66
67 #Save the extracted methods and app1 in a same file to extract information
68 extractorFile = open("Extractor/extractorFile.groovy", "w+")
69 Extractor = open("Extractor/Extractor.groovy", "r")
70 F1 = open("Extractor/App1/App1.groovy", "r")
71
72 extractorFile.write("////////////////////")
73 extractorFile.write("@Field App\n")
74 extractorFile.write("App = \"App1\"")
75 extractorFile.write("\n")
76 for line in Extractor:
77         extractorFile.write(line)
78 extractorFile.write("\n\n")
79 for line in F1:
80         extractorFile.write(line)
81 extractorFile.close()
82 Extractor.close()
83 F1.close()
84 #Run the file to extract the objects
85 os.system("groovy Extractor/extractorFile.groovy")
86
87
88 #Save the extracted methods and app2 in a same file to extract information
89 extractorFile = open("Extractor/extractorFile.groovy", "w+")
90 Extractor = open("Extractor/Extractor.groovy", "r")
91 F2 = open("Extractor/App2/App2.groovy", "r")
92
93 extractorFile.write("////////////////////")
94 extractorFile.write("@Field App\n")
95 extractorFile.write("App = \"App2\"")
96 extractorFile.write("\n")
97 for line in Extractor:
98         extractorFile.write(line)
99 extractorFile.write("\n\n")
100 for line in F2:
101         extractorFile.write(line)
102 #Run the file to extract the objects
103 extractorFile.close()
104 Extractor.close()
105 F2.close()
106 os.system("groovy Extractor/extractorFile.groovy")
107
108
109
110