1 | !752 |
2 | |
3 | answer {
|
4 | if (!attn()) ret null; |
5 | |
6 | if (jmatchStart("tree", s, m)) {
|
7 | S snl = m.rest().trim(); |
8 | L<S> tok = codeTokensOnly(nlTok(snl)); |
9 | //new L<S> out; |
10 | //printTree(tok, i, out); |
11 | //ret slackSnippet(out); |
12 | ret structure(getTree(tok)); |
13 | ] |
14 | } |
15 | |
16 | static Lisp tree(L<S> tok) {
|
17 | ret tree(tok, 0, l(tok)); |
18 | } |
19 | |
20 | static Lisp tree(L<S> tok, int i, int j) {
|
21 | ret lisp(join(" ", subList(tok, 0, i)));
|
22 | } |
23 | |
24 | static Lisp getTree(L<S> tok) {
|
25 | if (empty(tok)) ret lisp("_empty");
|
26 | int i = indexOfOperator(tok, 0); |
27 | if (i >= l(tok)) |
28 | ret tree(tok); |
29 | |
30 | S op = tok.get(i); |
31 | if (eq(op, "<")) {
|
32 | ret lisp("* < *",
|
33 | getTree(subList(tok, 0, i)), |
34 | getTree(subList(tok, i+1)); |
35 | } else if (eq(op, ">")) {
|
36 | ret lisp("* > *",
|
37 | getTree(subList(tok, 0, i)), |
38 | getTree(subList(tok, i+1)); |
39 | } else if (eq(op, "[")) {
|
40 | int j = snlEndOfBrackets(tok, i); |
41 | |
42 | } |
43 | } |
44 | |
45 | // i must point at the opening bracket (any of the 2 types, not type parameters) |
46 | // index returned is index of closing bracket + 1 |
47 | static int snlEndOfBrackets(List<String> tok, int i) {
|
48 | int j = i+1, level = 1; |
49 | while (j < tok.size()) {
|
50 | if (litlist("[", "(").contains(tok.get(j))) ++level;
|
51 | else if (litlist("]", ")").contains(tok.get(j))) --level;
|
52 | if (level == 0) |
53 | retj+1; |
54 | ++j; |
55 | } |
56 | return l(tok); |
57 | } |
58 | |
59 | /* |
60 | static void printTree(L<S> tok, int indent, L<S> out) {
|
61 | if (empty(tok)) ret; |
62 | int i = indexOfOperator(tok, 0); |
63 | if (i >= l(tok)) {
|
64 | out.add(indent(indent) + join(" ", tok));
|
65 | ret; |
66 | } |
67 | S op = tok.get(i); |
68 | if (eq(op, "<")) {
|
69 | out.add(indent(indent) + join(" ", subList(tok, 0, i)));
|
70 | printTree(subList(tok, i+1)); |
71 | } else if (eq(op, ">")) {
|
72 | out.add(indent(indent) + join(" ", subList(tok, 0, i)));
|
73 | printTree(subList(tok, i+1)); |
74 | } |
75 | }*/ |
76 | |
77 | static |
78 | |
79 | static int indexOfOperator(L<S> tok, int i) {
|
80 | while (i < l(tok) && !isOperator(tok.get(i))) ++i; |
81 | ret i; |
82 | } |
83 | |
84 | static L<S> operators = litlist("<", ">", "[", "]", "(", ")");
|
85 | |
86 | static boolean isOperator(S t) {
|
87 | ret operators.contains(t); |
88 | } |
Began life as a copy of #1002700
download show line numbers debug dex old transpilations
Travelled to 13 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
| Snippet ID: | #1002707 |
| Snippet name: | TREE - SNL to tree (dev., probably abandoned) |
| Eternal ID of this version: | #1002707/1 |
| Text MD5: | b966e3877839519ace348140baa6fb1e |
| Author: | stefan |
| Category: | nl bots |
| Type: | JavaX source code |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2016-02-16 01:19:24 |
| Source code size: | 2121 bytes / 88 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 876 / 846 |
| Referenced in: | [show references] |