Download Jar. Uses 3874K of libraries. Click here for Pure Java version (7473L/53K).
1 | !7 |
2 | |
3 | srecord DollarVarPattern(S pat) {}
|
4 | srecord Definition(O lhs, O rhs) {}
|
5 | srecord PatternMatches(O pat, O s) {}
|
6 | srecord Input(S s) {}
|
7 | |
8 | sS defs = [[ |
9 | A cup of water = A cup with water inside |
10 | A cup of Peter = A cup that belongs to Peter |
11 | A cup of glass = A cup that consists of glass |
12 | A cup of style = A cup that has a lot of style |
13 | ]]; |
14 | |
15 | static new LinkedHashSet objects; |
16 | |
17 | p-exp {
|
18 | objects.add(Input("a cup of joe"));
|
19 | |
20 | for (S s : tlft(defs)) {
|
21 | L<S> l = splitAtJavaToken(s, "="); |
22 | objects.add(Definition(first(l), second(l))); |
23 | } |
24 | |
25 | int initialObjects = l(objects); |
26 | long startTime = now(); |
27 | int n = -1; |
28 | while (l(objects) > n) {
|
29 | n = l(objects); |
30 | L<Definition> defs = instancesOf(Definition, objects); |
31 | for (Definition a : defs) |
32 | for (Definition b : defs) |
33 | if (a.lhs instanceof S && b.lhs instanceof S) {
|
34 | S pat = combineToDollarVarPattern((S) a.lhs, (S) b.lhs); |
35 | if (containsDollarVars(pat)) |
36 | objects.add(DollarVarPattern(pat)); |
37 | } |
38 | |
39 | for (DollarVarPattern pat : instancesOf(DollarVarPattern, objects)) {
|
40 | for (Definition a : defs) if (a.lhs instanceof S) {
|
41 | SS match = matchDollarVarsIC(pat.pat, (S) a.lhs); |
42 | if (match != null) |
43 | generalizeDefinition(a, match); |
44 | } |
45 | } |
46 | |
47 | for (Input i : instancesOf(Input, objects)) |
48 | for (Definition a : defs) if (a.lhs instanceof DollarVarPattern) {
|
49 | SS match = matchDollarVarsIC(((DollarVarPattern) a.lhs).pat, i.s); |
50 | if (match != null) |
51 | specializeDefinition(a, match); |
52 | } |
53 | } |
54 | long time = now()-startTime; |
55 | |
56 | pnlStruct(objects); |
57 | print("\n" + n2(l(objects)-initialObjects, "rewrite") + " in " + (now()-startTime) + " ms");
|
58 | |
59 | final Input in = firstInstanceOf(Input, objects); |
60 | if (in != null) {
|
61 | L<Definition> definitions = [Definition d : instancesOf(Definition, objects) | eqic_gen(d.lhs, in.s)]; |
62 | print("Got " + n2(definitions, "definition") + " for input " + quote(in.s) + (empty(definitions) ? "." : ":"));
|
63 | printStructLinesIndent(definitions); |
64 | assertEquals(4, l(definitions)); |
65 | } |
66 | } |
67 | |
68 | svoid generalizeDefinition(Definition def, SS match) {
|
69 | SS rev = reverseCIMap(match); |
70 | S lhs = transformEachTokenUsingMap((S) def.lhs, rev); |
71 | S rhs = transformEachTokenUsingMap((S) def.rhs, rev); |
72 | addIfNotNull(objects, Definition(DollarVarPattern(lhs), DollarVarPattern(rhs))); |
73 | } |
74 | |
75 | svoid specializeDefinition(Definition def, SS match) {
|
76 | S lhs = transformEachTokenUsingMap(((DollarVarPattern) def.lhs).pat, match); |
77 | S rhs = transformEachTokenUsingMap(((DollarVarPattern) def.rhs).pat, match); |
78 | addIfNotNull(objects, Definition(lhs, rhs)); |
79 | } |
download show line numbers debug dex old transpilations
Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1017020 |
| Snippet name: | Patterns Step 1 [OK] |
| Eternal ID of this version: | #1017020/29 |
| Text MD5: | aea38056d2a535418fa3bf68d5befe57 |
| Transpilation MD5: | 69cb33a5c5b48cade23319487c9bd12a |
| Author: | stefan |
| Category: | javax / a.i. |
| Type: | JavaX source code (desktop) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2018-07-10 22:18:57 |
| Source code size: | 2725 bytes / 79 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 786 / 1866 |
| Version history: | 28 change(s) |
| Referenced in: | [show references] |