Skip to content

Instantly share code, notes, and snippets.

@lisitsyn
Created November 18, 2014 15:58
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lisitsyn/38662774c3f594cc6580 to your computer and use it in GitHub Desktop.
Save lisitsyn/38662774c3f594cc6580 to your computer and use it in GitHub Desktop.
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)
@lisitsyn
Copy link
Author

Output is

# initialize CSVFile from "filename" as file
CCSVFile file = CCSVFile("filename")
# initialize RealFeatures from file as features
RealFeatures features = RealFeatures(file)
# set float kernel_width to 2
float64_t kernel_width = 2
# initialize GaussianKernel from kernel_width as kernel
CGaussianKernel kernel = CGaussianKernel(kernel_width)
# set matrix<float> K to kernel_matrix of kernel
matrix<float> K = kernel.get_kernel_matrix()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment