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

65
LINES

< > BotCompany Repo | #1002015 // Java Interpreter (hotwirable)

JavaX source code [tags: use-pretranspiled] - run with: x30.jar

Libraryless. Click here for Pure Java version (628L/5K/15K).

!752

static O interpret(S java) {
  ret new JavaInterpreter().interpret(java);
}

// to trigger function inclusion

static void dummy() {
  eq(null, null);
  collapseWord(null);
}

static class JavaInterpreter {
  int i;
  L<S> tok;
  L<S> allowedFunctions = litlist("eq", "collapseWord");
  
  O interpret(S java) {
    i = 1;
    tok = javaTok(java);
    if (litlist("ret", "returns").contains(get(tok, i))) {
      i += 2;
      O result = expression();
      consume(";");
      ret result;
    }
    
    throw fail("huh? " + i + " " + get(tok, i));
  }
  
  void consume(S x) {
    assertEquals(get(tok, i), x);
    i += 2;
  }
  
  S consume() {
    S t = t();
    assertNotNull(t);
    i += 2;
    ret t;
  }
  
  S t() {
    ret get(tok, i);
  }
  
  O expression() {
    if (isQuoted(t()))
      ret unquote(consume());
    if (isIdentifier(t())) {
      S fname = consume();
      consume("(");
      new L args;
      while (neq(t(), ")")) {
        args.add(expression());
        if (eq(t(), ","))
          consume();
      }
      consume(")");
      ret call(mainClass(), fname, toObjectArray(args));
    }
    throw fail(t());
  }
}

download  show line numbers  debug dex  old transpilations   

Travelled to 15 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, teubizvjbppd, tslmcundralx, tvejysmllsmz, vouqrxazstgt

No comments. add comment

Snippet ID: #1002015
Snippet name: Java Interpreter (hotwirable)
Eternal ID of this version: #1002015/1
Text MD5: 0af211027b0c00b87d68af2a84a605e9
Transpilation MD5: e9d7b9c8518ab6fe24c691dd73b1aa74
Author: stefan
Category: javax
Type: JavaX source code
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2015-12-13 19:12:44
Source code size: 1215 bytes / 65 lines
Pitched / IR pitched: No / Yes
Views / Downloads: 559 / 838
Referenced in: #1002011 - Test Java Interpreter
#3000382 - Answer for ferdie (>> t = 1, f = 0)
#3000383 - Answer for funkoverflow (>> t=1, f=0 okay)