You know, copyright lasts an outrageous length of time. About 80 years after the authors death if I can remember correctly. The Micky Mouse cartoon "Steamboat Willy" was made around the 1920's and still isn't in the public domain. So, as far as copyright is concerned, Petit Computer, Smile Basic 3DS, and Smile Basic Switch are all under full copyright protection and will still be long after I am dead. It doesn't matter if you can buy it or if it has been abandoned. So I don't think it matters which version you base your code around. Although it is mean to make a work alike of something that is currently being sold.
Attack dog lawyers searching for IP infringing content can also send you a cease and desist even if what you are doing is perfectly legal. This is another reason to make your code different and distinct. No reason you couldn't have a superset of SmileBasic. Maybe throw in classes or 3D support. QBasic could still run GW Basic programs, for example. I don't think you will have a large library of code to run either way, most of it is probably locked on a 3DS/Switch or SmileBoom's servers.
I thought you were making your interpreter in Lua, so I suggested Love (Pico-8 uses Lua too). If you don't like them that's ok (although I am curious of why you despise them as opposed to simply disliking them).
Here is a 3DS SmileBasic sample program, just text mode stuff to try parsing
OPTION STRICT
VAR SCREEN_W = 400
VAR SCREEN_H = 240
VAR FONT_PX = 8
VAR CON_W = SCREEN_W / FONT_PX
VAR CON_H = SCREEN_H / FONT_PX
VAR IDX_X = 0
VAR IDX_Y = 1
VAR IDX_FOUND = 2
VAR NUM_MUGWUMPS = 4
VAR GRID_W = 10
VAR GRID_H = GRID_W
VAR DISTANCE, TURN, I, X, Y
VAR REMAINING, PLAY_AGAIN$
CENTER_PRINT "MUGWUMP"
CENTER_PRINT "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
PRINT
PRINT
PRINT
'COURTESY PEOPLE'S COMPUTER COMPANY
DIM POS[NUM_MUGWUMPS, IDX_FOUND + 1]
PRINT_INTRODUCTION
WHILE TRUE
INIT_MUGWUMPS
TURN = 0
WHILE TRUE
TURN = TURN + 1
PRINT
PRINT
REPEAT
INPUT "TURN NO. " + STR$(TURN) + " WHAT IS YOUR GUESS? "; X, Y
UNTIL X >= 0 AND X < GRID_W AND Y >= 0 AND Y < GRID_H
FOR I = 0 TO NUM_MUGWUMPS - 1
IF POS[I, IDX_FOUND] == 0 THEN
IF POS[I, IDX_X] != X OR POS[I, IDX_Y] != Y THEN
DISTANCE = SQR(POW(X - POS[I, IDX_X], 2) + POW(Y - POS[I, IDX_Y], 2))
PRINT "YOU ARE "; FLOOR(DISTANCE * 10) / 10; " UNITS FROM MUGWUMP "; I + 1
ELSE
POS[I, IDX_FOUND] = 1
PRINT "YOU HAVE FOUND MUGWUMP "; I
ENDIF
ENDIF
NEXT I
REMAINING = 0
FOR I = 0 TO NUM_MUGWUMPS - 1
IF POS[I, IDX_FOUND] == 0 THEN
REMAINING = REMAINING + 1
ENDIF
NEXT I
IF REMAINING == 0 THEN
PRINT
PRINT "YOU GOT THEM ALL IN ";TURN; " TURNS!"
BREAK
ELSEIF TURN >= 10 THEN
PRETTY_PRINT "SORRY, THAT'S 10 TRIES, HERE IS WHERE THEY'RE HIDING"
PRINT
FOR I = 0 TO NUM_MUGWUMPS - 1
IF POS[I, IDX_FOUND] == 0 THEN
PRINT "MUGWUMP "; I; " IS AT ("; POS[I, IDX_X]; ", "; POS[I, IDX_Y]; ")"
ENDIF
NEXT I
BREAK
ENDIF
WEND
PRINT
PRINT "THAT WAS FUN!"
REPEAT
INPUT "WOULD YOU LIKE TO PLAY AGAIN? (Y/N) ";PLAY_AGAIN$
PLAY_AGAIN$ = LEFT$(UCASE$(TRIM$(PLAY_AGAIN$)), 1)
UNTIL PLAY_AGAIN$ == "Y" OR PLAY_AGAIN$ == "N"
IF PLAY_AGAIN$ == "N" THEN
BREAK
ENDIF
PRINT "FOUR MORE MUGWUMPS ARE NOW IN HIDING."
WEND
END
DEF CENTER_PRINT MESSAGE$
VAR X = MAX(0, (CON_W - LEN(MESSAGE$))/2)
LOCATE X, CSRY
PRINT MESSAGE$
END
DEF INIT_MUGWUMPS
FOR I = 0 TO NUM_MUGWUMPS - 1
POS[I, IDX_X] = RND(GRID_W)
POS[I, IDX_Y] = RND(GRID_H)
POS[I, IDX_FOUND] = 0
NEXT I
END
DEF PRETTY_PRINT MESSAGE$
VAR I, WORDS$[0], DELIM$ = " "
WORDS$ = SPLIT(MESSAGE$, " ")
FOR I = 0 TO LEN(WORDS$) - 1
IF CSRX > 0 AND CSRX < CON_W - 1 THEN
PRINT DELIM$;
ENDIF
IF CSRX + LEN(WORDS$[I]) >= CON_W THEN
PRINT ""
ENDIF
PRINT WORDS$[I];
NEXT I
END
DEF PRINT_INTRODUCTION
PRETTY_PRINT "THE OBJECT OF THIS GAME IS TO FIND FOUR MUGWUMPS"
PRETTY_PRINT "HIDDEN ON A 10 BY 10 GRID. HOMEBASE IS POSITION 0,0"
PRETTY_PRINT "ANY GUESS YOU MAKE MUST BE TWO NUMBERS WITH EACH"
PRETTY_PRINT "NUMBER BETWEEN 0 AND 9 INCLUSIVE. FIRST NUMBER"
PRETTY_PRINT "IS DISTANCE TO RIGHT OF HOMEBASE AND SECOND NUMBER"
PRETTY_PRINT "IS DISTANCE ABOVE HOMEBASE."
PRINT
PRINT
PRETTY_PRINT "YOU GET 10 TRIES. AFTER EACH TRY, I WILL TELL"
PRETTY_PRINT "YOU HOW FAR YOU ARE FROM EACH MUGWUMP"
PRINT
PRINT
END
'SPLIT A GIVEN STING DELIMITED BY DELIMITER
'RETURNS A STRING ARRAY
DEF SPLIT(MESSAGE$, DELIM$)
VAR RET$[0], CH$, WORD$, I
FOR I = 0 TO LEN(MESSAGE$) - 1
CH$ = MID$(MESSAGE$, I, 1)
IF CH$ == DELIM$ THEN
IF LEN(WORD$) > 0 THEN
PUSH RET$, WORD$
WORD$ = ""
ENDIF
ELSE
WORD$ = WORD$ + CH$
ENDIF
NEXT I%
IF LEN(WORD$) > 0 THEN PUSH RET$, WORD$
RETURN RET$
END
'RETURN THE GIVEN STRING EXCEPT WITH
'WHITE SPACE CHARACTERS REMOVED FROM THE
'STRINGS BEGINNING AND END.
DEF TRIM$(MESSAGE$)
DIM I, J, CH$
IF LEN(MESSAGE$) > 0 THEN
I = 0
J = LEN(MESSAGE$) - 1
CH$ = MID$(MESSAGE$, I, 1)
WHILE CH$ == " " OR CH$ == CHR$(9) OR CH$ == CHR$(10) OR CH$ == CHR$(13)
I = I + 1
IF I >= J THEN BREAK
CH$ = MID$(MESSAGE$, I, 1)
WEND
CH$ = MID$(MESSAGE$, J, 1)
WHILE CH$ == " " OR CH$ == CHR$(9) OR CH$ == CHR$(10) OR CH$ == CHR$(13)
J = J - 1
IF J <= I THEN BREAK
CH$ = MID$(MESSAGE$, J, 1)
WEND
RETURN MID$(MESSAGE$, I, J - I + 1)
ELSE
RETURN ""
ENDIF
END
'RETURN GIVEN STRING IN ALL UPPER CASE
DEF UCASE$(MESSAGE$)
VAR I, CH$, RET$
FOR I = 0 TO LEN(MESSAGE$) - 1
CH$ = MID$(MESSAGE$, I, 1)
IF ASC(CH$) >= ASC("a") AND ASC(CH$) <= ASC("z") THEN
RET$ = RET$ + CHR$(ASC("A") - ASC("a") + ASC(CH$))
ELSE
RET$ = RET$ + CH$
ENDIF
NEXT I
RETURN RET$
END