1 | sclass RuleEngine2_MatchedRule {
|
2 | S globalID = aGlobalID(); |
3 | RuleEngine2.Rule rule; |
4 | int iCond; |
5 | SS map; |
6 | new Map<S, Int> mappingQuality; // key in map to -1, 0 or 1 |
7 | new LPair<LS> matchedLines; |
8 | S tokenizationFunction; |
9 | S outTokenizer; // tokenization function for output part of rule |
10 | LS remainingConditions; |
11 | L<TextAndType> remainingConditionsWithType; |
12 | Int qualitySum; |
13 | Int nPossibleVars; |
14 | S out; |
15 | SS inputsByType; |
16 | GInterpretable interpretable; // what we matched on |
17 | |
18 | int qualitySum() {
|
19 | if (qualitySum == null) |
20 | qualitySum = intSum(values(mappingQuality))-l(map); |
21 | ret qualitySum; |
22 | } |
23 | |
24 | int nPossibleVars() {
|
25 | if (nPossibleVars == null) |
26 | nPossibleVars = l(possibleVars()); |
27 | ret nPossibleVars; |
28 | } |
29 | |
30 | bool isSpecialRule() {
|
31 | ret rule instanceof RuleEngine2.SimplifyWithRule; |
32 | } |
33 | |
34 | double relativeQuality() {
|
35 | ret isSpecialRule() ? 0 : doubleRatio(qualitySum(), nPossibleVars()); |
36 | } |
37 | |
38 | // counts all tokens |
39 | Set<S> possibleVars() {
|
40 | ret asCISet(codeTokens(tokenize(first(rule.in)))); |
41 | } |
42 | |
43 | RuleEngine2.Rule applyMapping() {
|
44 | new RuleEngine2.Rule r; |
45 | r.in = map(rule.in, f<S, S> applyMappingTo); |
46 | r.out = applyMappingTo(rule.out); |
47 | ret r; |
48 | } |
49 | |
50 | S appliedRuleText() {
|
51 | ret applyMapping().asText(); |
52 | } |
53 | |
54 | S outText() {
|
55 | if (out == null) |
56 | out = join(ai_mapCodeTokensWithMap(outTokenize(rule.out), map)); |
57 | ret out; |
58 | } |
59 | |
60 | S applyMappingTo(GRuleLine line) {
|
61 | ret line == null ? null : join(ai_mapCodeTokensWithMap(tokenize(line), map)); |
62 | } |
63 | |
64 | S applyMappingTo(S s) {
|
65 | ret s == null ? null : join(ai_mapCodeTokensWithMap(tokenize(s), map)); |
66 | } |
67 | |
68 | LS tokenize(S s) {
|
69 | ret (LS) callAndMake(assertNotNull(tokenizationFunction), s); |
70 | } |
71 | |
72 | LS outTokenize(S s) {
|
73 | ret (LS) callAndMake(assertNotNull(or(outTokenizer, tokenizationFunction)), s); |
74 | } |
75 | |
76 | LS tokenize(GRuleLine line) {
|
77 | ret (LS) callAndMake(assertNotNull(or(line.tokenizer, tokenizationFunction)), line.text); |
78 | } |
79 | |
80 | |
81 | bool moreConditions() { ret rule != null && iCond < l(rule.in); }
|
82 | |
83 | S ruleID() { ret rule.globalID; }
|
84 | |
85 | void flush() {
|
86 | // don't flush results of simplifiers |
87 | if (tokenizationFunction != null || outTokenizer != null) |
88 | out = null; |
89 | } |
90 | |
91 | toString {
|
92 | ret "MatchedRule " + ruleID() + " with " + map + (moreConditions() ? " [unsatisfied]" : ""); |
93 | } |
94 | } |
download show line numbers debug dex old transpilations
Travelled to 7 computer(s): bhatertpkbcr, cfunsshuasjs, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1021448 |
| Snippet name: | RuleEngine2_MatchedRule |
| Eternal ID of this version: | #1021448/26 |
| Text MD5: | 9319e53199225570fdf2ee996fd2eb9b |
| Author: | stefan |
| Category: | javax / a.i. |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2019-03-18 11:44:53 |
| Source code size: | 2462 bytes / 94 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 723 / 1247 |
| Version history: | 25 change(s) |
| Referenced in: | [show references] |