Subversion Repositories programming

Rev

Rev 131 | Rev 136 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 131 Rev 135
Line 194... Line 194...
194
                    if j not in storage:
194
                    if j not in storage:
195
                        storage.append(j)
195
                        storage.append(j)
196
 
196
 
197
        return storage
197
        return storage
198
 
198
 
-
 
199
    def __unique_sort(self, li):
-
 
200
        """Make sure everything in a list is unique, and then sort it"""
-
 
201
 
-
 
202
        newlist = []
-
 
203
 
-
 
204
        for i in li:
-
 
205
            if i not in newlist:
-
 
206
                newlist.append(i)
-
 
207
 
-
 
208
        newlist.sort()
-
 
209
        return newlist
-
 
210
 
-
 
211
    def __generate_dfa_table(self):
-
 
212
 
-
 
213
        # get the list of all letters
-
 
214
        possible_letters = []
-
 
215
 
-
 
216
        for (state, letter) in self.trans_func.keys():
-
 
217
            if letter not in possible_letters:
-
 
218
                possible_letters.append(letter)
-
 
219
 
-
 
220
        # DFA_TABLE STRUCTURE
-
 
221
        #
-
 
222
        # [ [Final, DFA_State_Number, [States_in_NFA], letter_1, letter_2, ..., letter_n]
-
 
223
        #   [Final, DFA_State_Number, [States_in_NFA], letter_1, letter_2, ..., letter_n]
-
 
224
        #   [Final, DFA_State_Number, [States_in_NFA], letter_1, letter_2, ..., letter_n] ]
-
 
225
        #
-
 
226
 
-
 
227
        dfa_table = []
-
 
228
 
-
 
229
        # find the first state's definition
-
 
230
        def_in_nfa = self.__E(0)
-
 
231
        is_final = False
-
 
232
 
-
 
233
        temp_record = []
-
 
234
 
-
 
235
        # find out if we're final
-
 
236
        for i in def_in_nfa:
-
 
237
            if i in self.final_states:
-
 
238
                is_final = True
-
 
239
                break
-
 
240
 
-
 
241
        temp_record.append(is_final)
-
 
242
        temp_record.append(len(dfa_table))
-
 
243
        temp_record.append(def_in_nfa)
-
 
244
 
-
 
245
        # find out where we can go by each letter
-
 
246
        for l in possible_letters:
-
 
247
            where_to_go = []
-
 
248
 
-
 
249
            for s in def_in_nfa:
-
 
250
                where_to_go.extend(self.__next_states(s, l))
-
 
251
 
-
 
252
            where_to_go = self.__unique_sort(where_to_go)
-
 
253
 
-
 
254
            create_new_state = True
-
 
255
 
-
 
256
            for s in dfa_table:
-
 
257
                if s[2] == where_to_go:
-
 
258
                    temp_record.append(s[1])
-
 
259
                    create_new_state = False
-
 
260
                    break
-
 
261
 
-
 
262
            if create_new_state:
-
 
263
                # recurse???
-
 
264
                pass
-
 
265
 
-
 
266
################################################################################
-
 
267
# NEW STUFF IS AFTER THIS
-
 
268
################################################################################
-
 
269
 
-
 
270
        temp_record = [None for n in range(len(possible_letters) + 3)]
-
 
271
 
-
 
272
        # start at initial state
-
 
273
        # generate E(initial_state)
-
 
274
        # find out if we are a final state (based on E() )
-
 
275
        # name the state (starting at 0)
-
 
276
        #
-
 
277
 
199
    def output_dfa(self):
278
    def output_dfa(self):
200
        #stuff here
279
        #stuff here
201
        pass
280
        pass
202
 
281
 
203
if __name__ == '__main__':
282
if __name__ == '__main__':