+INTERPRET_CFA = defWord("INTERPRET",
+ [LIT_CFA, 32, WORD_CFA, # Read next space-delimited word
+
+ DUP_CFA, FETCH_CFA, ZE_CFA, ZBRANCH_CFA, 3,
+ DROP_CFA, EXIT_CFA, # Exit if TIB is exhausted
+
+ STATE_CFA, FETCH_CFA, ZBRANCH_CFA, 24,
+ # Compiling
+ FIND_CFA, QDUP_CFA, ZBRANCH_CFA, 13,
+
+ # Found word.
+ LIT_CFA, -1, EQ_CFA, INVERT_CFA, ZBRANCH_CFA, 4,
+
+ # Immediate: Execute!
+ EXECUTE_CFA, BRANCH_CFA, -26,
+
+ # Not immediate: Compile!
+ COMMA_CFA, BRANCH_CFA, -29,
+
+ # No word found, parse number
+ NUMBER_CFA, LIT_CFA, LIT_CFA, COMMA_CFA, COMMA_CFA, BRANCH_CFA, -36,
+
+ # Interpreting
+ FIND_CFA, QDUP_CFA, ZBRANCH_CFA, 5,
+
+ # Found word. Execute!
+ DROP_CFA, EXECUTE_CFA, BRANCH_CFA, -44,
+
+ # No word found, parse number and leave on stack
+ NUMBER_CFA, BRANCH_CFA, -47,
+ EXIT_CFA])
+
+PROMPT_CFA = defPrimWord("PROMPT", () -> begin
+ if (mem[STATE] == 0 && currentSource() == STDIN)
+ println(" ok")
+ end
+
+ return NEXT