src/HOL/Tools/Sledgehammer/MaSh/src/dictionaries.py
changeset 54432 68f8bd1641da
parent 54056 8298976acb54
child 54692 5ce1b9613705
equal deleted inserted replaced
54431:e98996c2a32c 54432:68f8bd1641da
    20         Constructor
    20         Constructor
    21         '''
    21         '''
    22         self.nameIdDict = {}
    22         self.nameIdDict = {}
    23         self.idNameDict = {}
    23         self.idNameDict = {}
    24         self.featureIdDict={}
    24         self.featureIdDict={}
    25         self.maxNameId = 0
    25         self.maxNameId = 1
    26         self.maxFeatureId = 0
    26         self.maxFeatureId = 0
    27         self.featureDict = {}
    27         self.featureDict = {}
    28         self.dependenciesDict = {}
    28         self.dependenciesDict = {}
    29         self.accessibleDict = {}
    29         self.accessibleDict = {}
    30         self.expandedAccessibles = {}
    30         self.expandedAccessibles = {}
    31         self.accFile =  ''
    31         self.accFile =  ''
    32         self.changed = True
    32         self.changed = True
       
    33         # Unnamed facts
       
    34         self.nameIdDict[''] = 0
       
    35         self.idNameDict[0] = 'Unnamed Fact'
    33 
    36 
    34     """
    37     """
    35     Init functions. nameIdDict, idNameDict, featureIdDict, articleDict get filled!
    38     Init functions. nameIdDict, idNameDict, featureIdDict, articleDict get filled!
    36     """
    39     """
    37     def init_featureDict(self,featureFile):
    40     def init_featureDict(self,featureFile):
   151         # line = name:accessibles;features;dependencies
   154         # line = name:accessibles;features;dependencies
   152         line = line.split(':')
   155         line = line.split(':')
   153         name = line[0].strip()
   156         name = line[0].strip()
   154         nameId = self.get_name_id(name)
   157         nameId = self.get_name_id(name)
   155         line = line[1].split(';')
   158         line = line[1].split(';')
   156         # Accessible Ids
       
   157         #unExpAcc = [self.nameIdDict[a.strip()] for a in line[0].split()]
       
   158         #self.accessibleDict[nameId] = unExpAcc
       
   159         self.accessibleDict[nameId] = self.parse_unExpAcc(line[0])
       
   160         features = self.get_features(line)
   159         features = self.get_features(line)
   161         self.featureDict[nameId] = features
   160         self.featureDict[nameId] = features
   162         self.dependenciesDict[nameId] = [self.nameIdDict[d.strip()] for d in line[2].split()]        
   161         try:
       
   162             self.dependenciesDict[nameId] = [self.nameIdDict[d.strip()] for d in line[2].split()]        
       
   163         except:
       
   164             unknownDeps = []
       
   165             for d in line[2].split():
       
   166                 if not self.nameIdDict.has_key(d):
       
   167                     unknownDeps.append(d)
       
   168             raise LookupError('Unknown fact used as dependency: %s. Facts need to be introduced before being used as depedency.' % ','.join(unknownDeps))
       
   169         self.accessibleDict[nameId] = self.parse_unExpAcc(line[0])
       
   170 
   163         self.changed = True
   171         self.changed = True
   164         return nameId
   172         return nameId
   165 
   173 
   166     def parse_overwrite(self,line):
   174     def parse_overwrite(self,line):
   167         """
   175         """
   171         line = line[2:]
   179         line = line[2:]
   172 
   180 
   173         # line = name:dependencies
   181         # line = name:dependencies
   174         line = line.split(':')
   182         line = line.split(':')
   175         name = line[0].strip()
   183         name = line[0].strip()
   176         nameId = self.get_name_id(name)
   184         try:
   177 
   185             nameId = self.nameIdDict[name]
   178         dependencies = [self.nameIdDict[d.strip()] for d in line[1].split()]
   186         except:
       
   187             raise LookupError('Trying to overwrite dependencies for unknown fact: %s. Facts need to be introduced before overwriting them.' % name)
       
   188         try:
       
   189             dependencies = [self.nameIdDict[d.strip()] for d in line[1].split()]
       
   190         except:
       
   191             unknownDeps = []
       
   192             for d in line[1].split():
       
   193                 if not self.nameIdDict.has_key(d):
       
   194                     unknownDeps.append(d)
       
   195             raise LookupError('Unknown fact used as dependency: %s. Facts need to be introduced before being used as depedency.' % ','.join(unknownDeps))
   179         self.changed = True
   196         self.changed = True
   180         return nameId,dependencies
   197         return nameId,dependencies
   181 
   198 
   182     def parse_problem(self,line):
   199     def parse_problem(self,line):
   183         """
   200         """