# -*- coding: cp1252 -*-
enumkwlist = {
"a" : "enum_a",
"ab" : "enum_ab",
"abba" : "enum_abba",
"abab" : "enum_abab",
"aabb" : "enum_aabb",
}
error = "error" #Rückgabewert wenn string nicht gefunden wurde
indentor = "\t" # einrückungszeichen, könnte man durch leerzeichen ersetzen
def seperate(dictionary): #generiert aus dict<string, enum> ein dict<startchar, dict<string, enum>>, wobei die strings mit dem startchar beginnen
worddict = dict()
global wordlist
wordlist = list()
global char
char = sorted(dictionary)[0][0]
for entry in sorted(dictionary):
if (entry[0] == char):
wordlist.append(entry)
else:
worddict[char] = wordlist
wordlist = [entry]
char = entry[0]
worddict[char] = wordlist
return worddict
def generateNewDict(dictionary, char): #generiert ein neues dict wo der string mit char beginnen muss und entfernt das erste zeichen
newdict = dict()
for entry in dictionary:
if (entry[0] == char):
newdict[entry[1:]] = dictionary[entry]
return newdict
def generate(sel, level): #sel sei "string enum list", generiert das ganze switch/case
indention = level + 1
if (len(sel) == 0): #ohne strings kein code
return
print indention * indentor+"switch(s["+str(level)+"]){"
if ("" in sel):
print indention * indentor + "case 0:"
print indention * indentor + indentor + "return " + sel.values()[0] + ";"
del sel[""]
if (len(sel) == 0): #recheck weil 1 element gelöscht wurde
print indention * indentor + "}"
return
for char in seperate(sel):
print indention * indentor + "case '"+char+"':"
generate(generateNewDict(sel, char), level + 1)
print indention * indentor + indentor + "break;"
print indention * indentor + "}"
print "my_enum to_enum(const char *s){"
generate(enumkwlist, 0)
print indentor + "return " + error + ";"
print "}"
IyAtKi0gY29kaW5nOiBjcDEyNTIgLSotCmVudW1rd2xpc3QgPSB7CiAgICAiYSIgOiAiZW51bV9hIiwKICAgICJhYiIgOiAiZW51bV9hYiIsCiAgICAiYWJiYSIgOiAiZW51bV9hYmJhIiwKICAgICJhYmFiIiA6ICJlbnVtX2FiYWIiLAogICAgImFhYmIiIDogImVudW1fYWFiYiIsCn0KCmVycm9yID0gImVycm9yIiAjUsO8Y2tnYWJld2VydCB3ZW5uIHN0cmluZyBuaWNodCBnZWZ1bmRlbiB3dXJkZQoKaW5kZW50b3IgPSAiXHQiICMgZWlucsO8Y2t1bmdzemVpY2hlbiwga8O2bm50ZSBtYW4gZHVyY2ggbGVlcnplaWNoZW4gZXJzZXR6ZW4KCmRlZiBzZXBlcmF0ZShkaWN0aW9uYXJ5KTogI2dlbmVyaWVydCBhdXMgZGljdDxzdHJpbmcsIGVudW0+IGVpbiBkaWN0PHN0YXJ0Y2hhciwgZGljdDxzdHJpbmcsIGVudW0+Piwgd29iZWkgZGllIHN0cmluZ3MgbWl0IGRlbSBzdGFydGNoYXIgYmVnaW5uZW4KICAgIHdvcmRkaWN0ID0gZGljdCgpCiAgICBnbG9iYWwgd29yZGxpc3QKICAgIHdvcmRsaXN0ID0gbGlzdCgpCiAgICBnbG9iYWwgY2hhcgogICAgY2hhciA9IHNvcnRlZChkaWN0aW9uYXJ5KVswXVswXQogICAgZm9yIGVudHJ5IGluIHNvcnRlZChkaWN0aW9uYXJ5KToKICAgICAgICBpZiAoZW50cnlbMF0gPT0gY2hhcik6CiAgICAgICAgICAgIHdvcmRsaXN0LmFwcGVuZChlbnRyeSkKICAgICAgICBlbHNlOgogICAgICAgICAgICB3b3JkZGljdFtjaGFyXSA9IHdvcmRsaXN0CiAgICAgICAgICAgIHdvcmRsaXN0ID0gW2VudHJ5XQogICAgICAgICAgICBjaGFyID0gZW50cnlbMF0KICAgIHdvcmRkaWN0W2NoYXJdID0gd29yZGxpc3QKICAgIHJldHVybiB3b3JkZGljdAoKZGVmIGdlbmVyYXRlTmV3RGljdChkaWN0aW9uYXJ5LCBjaGFyKTogI2dlbmVyaWVydCBlaW4gbmV1ZXMgZGljdCB3byBkZXIgc3RyaW5nIG1pdCBjaGFyIGJlZ2lubmVuIG11c3MgdW5kIGVudGZlcm50IGRhcyBlcnN0ZSB6ZWljaGVuCiAgICBuZXdkaWN0ID0gZGljdCgpCiAgICBmb3IgZW50cnkgaW4gZGljdGlvbmFyeToKICAgICAgICBpZiAoZW50cnlbMF0gPT0gY2hhcik6CiAgICAgICAgICAgIG5ld2RpY3RbZW50cnlbMTpdXSA9IGRpY3Rpb25hcnlbZW50cnldCiAgICByZXR1cm4gbmV3ZGljdAoKZGVmIGdlbmVyYXRlKHNlbCwgbGV2ZWwpOiAjc2VsIHNlaSAic3RyaW5nIGVudW0gbGlzdCIsIGdlbmVyaWVydCBkYXMgZ2FuemUgc3dpdGNoL2Nhc2UKICAgIGluZGVudGlvbiA9IGxldmVsICsgMQogICAgaWYgKGxlbihzZWwpID09IDApOiAjb2huZSBzdHJpbmdzIGtlaW4gY29kZQogICAgICAgIHJldHVybgogICAgcHJpbnQgaW5kZW50aW9uICogaW5kZW50b3IrInN3aXRjaChzWyIrc3RyKGxldmVsKSsiXSl7IgogICAgaWYgKCIiIGluIHNlbCk6CiAgICAgICAgICAgIHByaW50IGluZGVudGlvbiAqIGluZGVudG9yICsgImNhc2UgMDoiCiAgICAgICAgICAgIHByaW50IGluZGVudGlvbiAqIGluZGVudG9yICsgaW5kZW50b3IgKyAicmV0dXJuICIgKyBzZWwudmFsdWVzKClbMF0gKyAiOyIKICAgICAgICAgICAgZGVsIHNlbFsiIl0KICAgIGlmIChsZW4oc2VsKSA9PSAwKTogI3JlY2hlY2sgd2VpbCAxIGVsZW1lbnQgZ2Vsw7ZzY2h0IHd1cmRlCiAgICAgICAgcHJpbnQgaW5kZW50aW9uICogaW5kZW50b3IgKyAifSIKICAgICAgICByZXR1cm4KICAgIGZvciBjaGFyIGluIHNlcGVyYXRlKHNlbCk6CiAgICAgICAgcHJpbnQgaW5kZW50aW9uICogaW5kZW50b3IgKyAiY2FzZSAnIitjaGFyKyInOiIKICAgICAgICBnZW5lcmF0ZShnZW5lcmF0ZU5ld0RpY3Qoc2VsLCBjaGFyKSwgbGV2ZWwgKyAxKQogICAgICAgIHByaW50IGluZGVudGlvbiAqIGluZGVudG9yICsgaW5kZW50b3IgKyAiYnJlYWs7IgogICAgcHJpbnQgaW5kZW50aW9uICogaW5kZW50b3IgKyAifSIKCnByaW50ICJteV9lbnVtIHRvX2VudW0oY29uc3QgY2hhciAqcyl7IgpnZW5lcmF0ZShlbnVta3dsaXN0LCAwKQpwcmludCBpbmRlbnRvciArICJyZXR1cm4gIiArIGVycm9yICsgIjsiCnByaW50ICJ9Igo=