Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

128
LINES

< > BotCompany Repo | #1028800 // Rewrite Database [OK]

JavaX source code (Dynamic Module) [tags: use-pretranspiled] - run with: Stefan's OS

Uses 911K of libraries. Click here for Pure Java version (18752L/102K).

1  
!7
2  
3  
concept RewriteExample {
4  
  S in, out;
5  
  O trail;
6  
}
7  
8  
concept Result {
9  
  S in, out;
10  
  O trail;
11  
  RewriteExample existing;
12  
}
13  
14  
cmodule RewriteDatabase {
15  
  transient CRUD<RewriteExample> rewriteExamplesCRUD;
16  
  transient CRUD<Result> resultsCRUD;
17  
  transient SingleComponentPanel scpSuggestions;
18  
  transient ReliableSingleThread rstMakeSuggestions = dm_rst(me(), r makeSuggestions).cancelBeforeTrigger();
19  
  transient ReliableSingleThread rstProcessInput = dm_rst(me(), r processInput).cancelBeforeTrigger();
20  
  S input;
21  
  int selectedTab;
22  
  switchable int maxResults = 1000;
23  
  
24  
  start {
25  
    dbIndexingCI(RewriteExample, 'in);
26  
    dbIndexingCI(Result, 'out);
27  
    rewriteExamplesCRUD = CRUD(RewriteExample);
28  
    resultsCRUD = CRUD(Result);
29  
  }
30  
  
31  
  visualize {
32  
    JComponent c = dm_rememberSelectedTab selectedTab(jtabs(
33  
      "Rewrite Examples",
34  
        centerAndSouthWithMargin(
35  
          rewriteExamplesCRUD.visualize(),
36  
          jCenteredSection("Suggestions", jMinHeight(100, scpSuggestions = singleComponentPanel()))),
37  
      "Input",
38  
        northAndCenterWithMargins(
39  
          withRightAlignedButtons(dm_centeredTextFieldAsSection input(),
40  
            "Make rule...", rThreadEnter makeRuleDialog),
41  
          jCenteredSection("Results", resultsCRUD.visualize()))
42  
    ));
43  
    resultsCRUD.addSelectionDependentButton("Accept", r { acceptResult(resultsCRUD.selected()) });
44  
    resultsCRUD.addSelectionDependentButton("Use as new input", r { setField(input := resultsCRUD.selected().out) });
45  
    onTableSelectionChanged(rewriteExamplesCRUD.table(), rstMakeSuggestions);
46  
    onConceptChangeByClass_notOnAllChanged RewriteExample(r { rstMakeSuggestions.trigger(); rstProcessInput.trigger(); });
47  
    dm_watchFieldAndNow input(rstProcessInput);
48  
    ret c;
49  
  }
50  
51  
  void makeSuggestions {
52  
    RewriteExample e = rewriteExamplesCRUD.selected(), ret if null;
53  
    new L<JComponent> buttons;
54  
    
55  
    S transferred = transferCurlyBracketPhrases(e.out, e.in);
56  
    if (neq(transferred, e.in))
57  
      buttons.add(jbutton("Change LHS to: " + transferred, r { cset(e, in := transferred) }));
58  
59  
    Set<S> sharedPhrases = sharedCurlyBracketPhrases(e.in, e.out);
60  
    if (nempty(sharedPhrases)) {
61  
      S var = firstUnusedCountingDollarVar(e.in);
62  
      for (S phrase : sharedPhrases) {
63  
        S in2 = jreplaceIC_literal(e.in, curly(phrase), var);
64  
        S out2 = jreplaceIC_literal(e.out, curly(phrase), var);
65  
        if (!hasConceptIC RewriteExample(in := in2, out := out2))
66  
          buttons.add(jbutton("Replace " + curly(phrase) + " with " + var, r {
67  
            addExample(in2, out2, ll('sharedCurlyBracketPhrases, e))
68  
          }));
69  
      }
70  
    }
71  
72  
    setComponent(scpSuggestions, scrollableStackWithSpacing(buttons));
73  
  }
74  
75  
  void processInput {
76  
    input = simplify(this.input);
77  
    print("Processing input: " + input);
78  
    deleteConcepts Result();
79  
80  
    // flexMatch input with all examples
81  
    for ping (RewriteExample e) {
82  
      if (containsDollarVars(e.in))
83  
        for (SS map : flexMatchDollarVarsIC_all(e.in, input))
84  
          addResult(cnew Result(in := input, out := replaceVars(e.out, map), trail := ll('flexMatch, e)));
85  
    }
86  
87  
    // Offer grouping last tokens
88  
    LS tok = javaTokWithAllBrackets_cached(input);
89  
    for (S s : tok_groupAfterNTokens_all(tok))
90  
      addResult(cnew Result(in := input, out := s));
91  
92  
    // Offer grouping first tokens
93  
    for (S s : tok_groupFirstNTokens_all(tok))
94  
      addResult(cnew Result(in := input, out := s));      
95  
  }
96  
97  
  void acceptResult(Result r) {
98  
    if (r == null || r.existing != null) ret;
99  
    RewriteExample e = addExample(r.in, r.out, r.trail);
100  
    if (e == null) ret;
101  
    cset(r, existing := e);
102  
  }
103  
104  
  void addResult(Result r) {
105  
    cset(r, existing := conceptWhereCI RewriteExample(in := r.in, out := r.out));
106  
    if (countConcepts Result() >= maxResults) quickFail("Maximum number of results reached");
107  
  }
108  
109  
  void makeRuleDialog {
110  
    JTextField tfIn = jTextField(input);
111  
    JTextField tfOut = jTextField(input);
112  
    showFormTitled2("Make rule",
113  
      "In",  tfIn,
114  
      "Out", tfOut,
115  
      r {
116  
        RewriteExample e = addExample(getText(tfIn), getText(tfOut), 'userDialog);
117  
        infoBox(e == null ? "Rule exists" : "Rule made: " + e.id);
118  
      });
119  
  }
120  
121  
  S simplify(S s) {
122  
    ret simpleSpacesAndTrim(s);
123  
  }
124  
125  
  RewriteExample addExample(S in, S out, O trail) {
126  
    ret csetAndReturn(uniqIC_returnIfNew RewriteExample(in := simplify(in), out := simplify(out)), +trail);
127  
  }
128  
}

download  show line numbers  debug dex  old transpilations   

Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv

No comments. add comment

Snippet ID: #1028800
Snippet name: Rewrite Database [OK]
Eternal ID of this version: #1028800/36
Text MD5: b42b82d766d83de8e14fa0c0982d6a5b
Transpilation MD5: fc567f41f5622784c941b545da16d395
Author: stefan
Category:
Type: JavaX source code (Dynamic Module)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2020-07-09 14:25:04
Source code size: 4437 bytes / 128 lines
Pitched / IR pitched: No / No
Views / Downloads: 180 / 4091
Version history: 35 change(s)
Referenced in: [show references]