Warning: session_start(): open(/var/lib/php/sessions/sess_2odgh2t2uvfp59b5sq55m5ld1a, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
srecord DollarVarPattern(S pat) {}
srecord Definition(O lhs, O rhs) {}
srecord PatternMatches(O pat, O s) {}
sS defs = [[
A cup of water = A cup with water inside
A cup of Peter = A cup that belongs to Peter
A cup of glass = A cup that consists of glass
A cup of style = A cup that has a lot of style
]];
p-exp {
new LinkedHashSet objects;
for (S s : tlft(defs)) {
L l = splitAtJavaToken(s, "=");
objects.add(Definition(first(l), second(l)));
}
int n = -1;
while (l(objects) > n) {
n = l(objects);
L defs = instancesOf(Definition, objects);
for (Definition a : defs)
for (Definition b : defs)
if (a.lhs instanceof S && b.lhs instanceof S) {
S pat = combineToDollarVarPattern((S) a.lhs, (S) b.lhs);
if (containsDollarVars(pat))
objects.add(DollarVarPattern(pat));
}
for (DollarVarPattern pat : instancesOf(DollarVarPattern, objects)) {
for (Definition a : defs) if (a.lhs instanceof S) {
SS match = matchDollarVarsIC(pat.pat, a.lhs);
if (match != null)
addIfNotNull(objects, generalizeDefinition(a, match));
}
}
}
pnlStruct(objects);
}
static Definition generalizeDefinition(Definition def, SS match) {
SS rev = reverseMap(match);
S lhs = transformEachTokenUsingMap((S) def.lhs, rev);
S rhs = transformEachTokenUsingMap((S) def.rhs, match);
ret Definition(DollarVarPattern(lhs), DollarVarPattern(rhs));
}