Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CODE$=INPUT$()
- STRICT=TRUE
- STACK#=[]
- CALLSTACK#=[]
- I:NUMBER=0
- CHAR$:STRING
- DO
- NEXTCHAR()
- SWITCH CHAR$
- CASE "["
- VALUE=0
- SIGN=1
- DO
- NEXTCHAR()
- SWITCH CHAR$
- CASE "]"
- IF !DONOTHING THEN STACK#.PUSH(VALUE*SIGN)
- BREAK
- CASE "["
- IF VALUE==0 THEN SIGN=-1
- VALUE=VALUE*10
- CASE "="
- VALUE=VALUE+1
- CASE ""
- PRINT "ERROR: UNTERMINATED NUMBER LITERAL"
- IF STRICT THEN STOP
- ENDSWITCH
- LOOP
- CASE "="
- START=I-1
- OPERATION$=""
- DO
- NEXTCHAR()
- SWITCH CHAR$
- CASE "="
- SWITCH OPERATION$
- CASE "" 'end loop
- IF DONOTHING THEN
- LEVEL=LEVEL-1
- IF LEVEL==0 THEN
- DONOTHING=FALSE
- ENDIF
- ELSE
- IF CALLSTACK#.LENGTH() THEN
- I=CALLSTACK#.POP()
- ELSE
- I=0
- ENDIF
- ENDIF
- CASE "]" 'loop
- IF DONOTHING THEN
- LEVEL=LEVEL+1
- ELSE
- CALLSTACK#.PUSH(START)
- ENDIF
- CASE "[" 'while
- IF DONOTHING THEN
- LEVEL=LEVEL+1
- ELSE
- IF STACK#.GET(STACK#.LENGTH()-1) THEN
- CALLSTACK#.PUSH(START)
- ELSE
- DONOTHING=TRUE
- LEVEL=1
- ENDIF
- ENDIF
- CASE "][" 'function def
- IF DONOTHING THEN
- LEVEL=LEVEL+1
- ELSE
- STACK#.PUSH(I)
- DONOTHING=TRUE
- LEVEL=1
- ENDIF
- CASE "[]" 'function call
- IF !DONOTHING THEN
- CALLSTACK#.PUSH(I)
- I=POPSTACK()
- ENDIF
- ELSE
- PRINT "ERROR: UNDEFINED LOOP ",OPERATION$
- IF STRICT THEN STOP
- ENDSWITCH
- BREAK
- CASE "]"
- OPERATION$=OPERATION$+"]"
- CASE "["
- OPERATION$=OPERATION$+"["
- CASE ""
- PRINT "ERROR: UNTERMINATED LOOP OPERATOR"
- IF STRICT THEN STOP
- ENDSWITCH
- LOOP
- CASE "]"
- OPERATION$=""
- DO
- NEXTCHAR()
- SWITCH CHAR$
- CASE "["
- IF !DONOTHING THEN
- SWITCH OPERATION$
- CASE ""
- PRINT POPSTACK()
- CASE "="
- OUTPUT(POPSTACK().CHR$())
- CASE "]" 'input number 'dup
- A=POPSTACK()
- STACK#.PUSH(A)
- STACK#.PUSH(A)
- CASE "==" 'compare
- A=POPSTACK()
- B=POPSTACK()
- STACK#.PUSH(A==B) 'maybe do sign subtract?
- CASE "=]" 'add
- A=POPSTACK()
- B=POPSTACK()
- STACK#.PUSH(A+B)
- CASE "]=" 'subtract
- A=POPSTACK()
- B=POPSTACK()
- STACK#.PUSH(A-B)
- CASE "]]"
- CASE "==]" 'input char
- CASE "=]]" 'input num
- ELSE
- PRINT "ERROR: UNDEFINED OPERATION",OPERATION$
- IF STRICT THEN STOP
- ENDSWITCH
- ENDIF
- BREAK
- CASE "]"
- OPERATION$=OPERATION$+"]"
- CASE "="
- OPERATION$=OPERATION$+"="
- CASE ""
- PRINT "ERROR: UNTERMINATED OPERATOR"
- IF STRICT THEN STOP
- ENDSWITCH
- LOOP
- CASE ""
- BREAK
- ENDSWITCH
- LOOP
- FUNC NEXTCHAR
- CHAR$=CODE$.MID$(I)I=I+1
- ENDFUNC
- FUNC POPSTACK
- IF STACK#.LENGTH() THEN RETURN STACK#.POP()
- RETURN 0
- ENDFUNC
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement