예제 #1
0
 def validate_schema(s):
     val = schema_q(s)
     avail_schema = ['R', 'CF', 'CQ', 'CV', 'TS', 'VAL']
     d_var = {}
     if(val):
         # Tokenize the schema line
         for kv in globl.str_map(lambda x: x.strip(), s.split(' ')):
             # Tokenize the key value pairs
             var = globl.str_map(lambda x: x.strip(), kv.split(':'))
             if(len(var) == 2):
                 if(var[0] in avail_schema):
                     # Determine any function calls (validate later)
                     if('(' in var[1]):
                         for term in globl.str_map(lambda x: x.strip(), var[1].split('+')):
                             term, func_names = globl.strip_func_names(term)
                             if(schema_guard[var[0]](term)):
                                 continue
                             else:
                                 print "ERROR: Invalid value for", var[0], "being", var[1]
                                 return False
                         d_var[var[0]] = var[1]
                     elif(schema_guard[var[0]](var[1])):
                         d_var[var[0]] = var[1]
                     else:
                         print "ERROR: Invalid value for", var[0], "being", var[1]
                         return False
                 else:
                     print "ERROR: Invalid key (", var[0], ") in schema"
                     return False
             else:
                 print "ERROR: Could not properly split", var
                 return False
         return d_var
     else:
         return False
예제 #2
0
def enumerate_terms(d):
    locality_lookup ={"R":pb.Term.R,
                      "CF":pb.Term.CF,
                      "CQ":pb.Term.CQ,
                      "CV":pb.Term.CV,
                      "TS":pb.Term.TS,
                      "VAL":pb.Term.VAL}
    def det_term_size(term):
        for const, label in d[globl.PARSE]:
            if(label == term and type(const) is int):
                return int(const)
        return False

    unique_schema = 0
    for dict in d[globl.SCHEMA]:
        for key in dict:
            type_list = globl.str_map(lambda x: x.strip(), dict[key].split('+'))
            offset = 0
            for item in type_list:
                term = d["PROTOBUF"].term.add()
                term.name = item
                term.locality = locality_lookup[key]
                #term.dataformat = ??
                term.location = type_list.index(item)
                term_size = det_term_size(item)
                term.schema = unique_schema
                if(term_size):
                    term.length = term_size
                    if(type(offset) is int):
                        term.offset = offset
                        offset += term_size
                else:
                    offset = "unknown"
        unique_schema += 1
    return d
예제 #3
0
 def validate_var(s):
     val = var_q(s)
     var = globl.str_map(lambda x: x.strip(), s.split('='))
     if(val and (len(var) == 2)):
         if(var_guard[val](var[1])):
             return var
         else:
             print "ERROR: Invalid value for variable", var[0]
             return False
     else:
         print "ERROR: Could not properly split", var
         return False
예제 #4
0
def remove_static_text(d):
    d['STATIC_TEXT'] = {}
    for dict in d[globl.SCHEMA]:
        for key in dict:
            dict[key] = map(globl.strip_func_names, globl.str_map(lambda x: x.strip(), dict[key].split('+')))
            for i in range(0, len(dict[key])):
                # If we have a static text
                if((dict[key][i][0] != "") and
                   ((dict[key][i][0][0] == '"') and
                    (dict[key][i][0][-1] == '"'))):
                    new_item = "_"+dict[key][i][0][1:-1]
                    # Instead of consolidating here we leverage the dictionary
                    # object to 'unique-ify' all text objects
                    d['STATIC_TEXT'][new_item] = t.TEXT.safe_substitute(var=new_item,
                                                                        val=dict[key][i][0])
                    dict[key][i][0] = new_item
    text_str = ""
    for key in d['STATIC_TEXT']:
        text_str += d['STATIC_TEXT'][key]
    d['STATIC_TEXT'] = text_str
    return d