Created
November 18, 2014 15:58
-
-
Save lisitsyn/38662774c3f594cc6580 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
input_text = """ | |
initialize CSVFile from "filename" as file; | |
initialize RealFeatures from file as features; | |
set float kernel_width to 2; | |
initialize GaussianKernel from kernel_width as kernel; | |
set matrix<float> K to kernel_matrix of kernel; | |
""" | |
import re | |
matchers = ( | |
{ | |
"groups": ["class", "name", "parameters"], | |
"regexp": "initialize (?P<class>\S+) from (?P<parameters>\S+) as (?P<name>\S+);", | |
"transformer": lambda data: "%s %s = %s(%s)" % (data['class'], data['name'], data['class'], data['parameters']) | |
}, | |
{ | |
"groups": ["name", "type", "value"], | |
"regexp": "set (?P<type>\S+) (?P<name>\S+) to (?P<value>\S+);", | |
"transformer": lambda data: "%s %s = %s" % (data['type'], data['name'], data['value']), | |
}, | |
{ | |
"groups": ["name", "type", "property", "other"], | |
"regexp": "set (?P<type>\S+) (?P<name>\S+) to (?P<property>\S+) of (?P<other>\S+);", | |
"transformer": lambda data: "%s %s = %s.get_%s()" % (data['type'], data['name'], data['other'], data['property']) | |
} | |
) | |
maps = { | |
"float" : "float64_t", | |
"matrix" : "SGMatrix", | |
"CSVFile": "CCSVFile", | |
"GaussianKernel": "CGaussianKernel" | |
} | |
for line in input_text.split("\n"): | |
matched = False | |
for matcher in matchers: | |
match = re.compile(matcher["regexp"]).match(line) | |
if match: | |
data = {} | |
for group in matcher["groups"]: | |
data[group] = match.group(group) | |
if data[group] in maps: | |
data[group] = maps[data[group]] | |
print "#", line[:-1] | |
print matcher["transformer"](data) | |
matched = True | |
break | |
if not matched and line != "": | |
raise Exception("Failed to parse: " + line) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Output is