slash.bac

'
' This is an interpreter for the Esoteric Language "Slash". PvE October 2016 - MIT License
'
' Link: http://esolangs.org/wiki////
'-------------------------------------------------------------------------------------------------------
'
' Possible inputs are:
'
' "/foo/foobar/foo foo foo"
' "/ world! world!/Hello,/ world! world! world!"
' "/foo/Hello, world!//B\\/\\\\R/foo/B/\\R"
' "/\\\\/good/\\/"
' "a/ab/bbaa/abb"
' "Hello"
' "/foo/Hello, world!//bar/foo/bar"
' "/1/0*//*0/0**//0//100010"
' "/*/\\/.\\\\0\\/,\\\\,0,\\\\,1\\/\\/.\\\\1\\/,\\\\,1,\\\\,0\\/\\/,\\\\,\\/.\\//********/.//.0"
' "/-/World//--/Hello//--W/--, w/---!"

INPUT "Enter SLASH code line: ", input$

PRINT NL$, "OUTPUT: ";

WHILE LEN(input$)

    token$ = LEFT$(input$, 1)

    input$ = MID$(input$, 2)

    IF NOT(escape_mode) THEN
        IF token$ = "\\" THEN
            escape_mode = TRUE
            CONTINUE
        ELIF token$ = "/" THEN
            op_mode = IIF(op_mode < 2, op_mode+1, 0)
            IF op_mode > 0 THEN CONTINUE
        ENDIF
    ENDIF

    SELECT op_mode
        CASE 1
            pattern$ = pattern$ & token$
        CASE 2
            replace$ = replace$ & token$
        CASE 0
            input$ = REPLACE$(input$, pattern$, replace$)
            IF NOT(INSTR(token$ & input$, "/")) THEN
                PRINT token$;
                BREAK
            ELSE
                PRINT LEFT$(input$, INSTR(input$, "/")-1);
                input$ = MID$(input$, INSTR(input$, "/"))
            ENDIF
            pattern$ = ""
            replace$ = ""
    ENDSELECT

    escape_mode = FALSE
WEND

PRINT input$
PRINT NL$, "PROGRAM READY."

Generated by GNU Enscript 1.6.5.90.