jwillia3 / basic Goto Github PK
View Code? Open in Web Editor NEWAn extensible BASIC interpreter in one header
License: Other
An extensible BASIC interpreter in one header
License: Other
BASIC INTERPRETER JERRY WILLIAMS JR Thank you for you interest in my little BASIC interpreter. Since a few people have asked, I've started including the license here in the repository. I have enjoyed hearing from people who find a use for this, so please do send me an e-mail if you feel so inclined. The license is the same as MIT with the paragraph removed: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. STATEMENTS: # COMMENT ... > EXPR DIM VAR(LENGTH) LOCAL [VAR [, VAR ...]] SUB NAME [PARAM [, PARAM ...]] ... END SUB NAME [ARG [, ARG ...]] RETURN [EXPRESSION] IF CONDITION ... [ELSE IF CONDITION ...] [ELSE ...] END IF IF CONDITION THEN STATEMENT WHILE CONDITION ... END WHILE FOR VAR=INIT TO FINAL ... END FOR FORMAT STRING [, EXPRESSION ...] RESUME BREAK BYE * "%" IN "FORMAT" PRINTS THE NEXT ARGUMENT AS AN INTEGER * "SUB" MAY NOT BE NESTED * "LOCAL" MAY ONLY BE USED IN A SUBROUTINE EXPRESSIONS: NUMBER, "", NAME, NAME(INDEX), NAME(ARG,...), UBOUND(VAR), (EXPRESSION) [EXPRESSION {*|/|\}] EXPRESSION [EXPRESSION {+|-}] EXPRESSION [EXPRESSION {=|<|>|<>|<=|=>}] EXPRESSION [EXPRESSION {AND|OR}] EXPRESSION * BOOLEAN VALUES ARE -1 FOR TRUE AND 0 FOR FALSE * "AND" AND "OR" ARE NOT SHORT-CIRCUITING * OPERATORS ARE LEFT-ASSOCIATIVE * STRINGS SHOULD ONLY BE USED FOR "FORMAT" GENERAL NOTES: * VARIABLES ARE CASE-INSENSITIVE * ARRAY INDEXES START FROM 1 IMPLEMENTATION * ALL BLOCK STRUCTURES LEAVE THEIR KEYWORD AT THE TOP OF THE C-STACK TO BE CHECKED AGAINST "END" * "TEMP" KEEPS TRACK OF HOW MANY CELLS ARE ON THE RUN-TIME STACK. "RETURN" DROPS THESE BEFORE EXITING THE FUNCTION. * "LOCAL" CANNOT CHANGE THE MODE OF A VARIABLE; A VARIABLE MUST BE NORMAL, AN ARRAY, OR SUBROUTINE IN ALL CONTEXTS. * "INITBASIC" IS NOT MEANT TO RESET THE INTERPRETER COMPILING AND INTERPRETING: IF GIVEN A FILE, WE BEGIN IN COMPILED MODE IF NO FILE IS GIVEN, WE BEGIN IN INTERPRETED MODE "CPC" IS THE "PC" OF THE NEXT INSTRUCTION TO COMPILE "IPC" IS THE BEGINNING OF TEMPORARY INTERPRETED CODE "OPC" IS THE PC TO RETURN TO AFTER INTERPRETED CODE IS RUN A STATMENT IS COMPILED IN EITHER MODE AFTER A STATEMENT IS COMPILED, IT IS RUN IN I-MODE BY: SETTING "PC" TO "IPC" EMITTING A "STOP_" RUNNING THE DRIVER RESTORING THE "PC" AND "CPC" COMPLEX STATEMENTS LIKE IF SET ENTER COMPILED MODE * "OPC" IS NULL IF "BREAK" IS RUN FROM COMPILED CODE * "RESUME" WITH A VALUE FOR EXPRESSIONS NOT STATEMENTS SUBROUTINES: C-STACK: {JMP} STACK: {LINK,SAVED...} SUBROUTINE DESCRIPTOR: TOTAL LOCALS PARAM COUNT INDEXES OF PARAMS VALUE OF A SUBROUTINE IS IT'S PC CALL TAKES VARIABLE INDEX * NO DISTINCTION BETWEEN FUNCTIONS AND SUBROUTINES * LOCALS MAY ONLY BE USED INSIDE OF A SUBROUTINE * TRYING TO USE THEM OUTSIDE WILL NOT REPORT AN ERROR WHILE: C-STACK: {TEST-FALSE-BRANCH, TOP} FOR: C-STACK: {TEST-FALSE-BRANCH, I, TOP} STACK: {HI} * "FOR_" AND "NEXT_" INSTRUCTIONS DROP THE HI VALUE FROM THE STACK ON FAILURE AND INCREMENT DIMENSIONS: THE VALUE OF A DIM IS A POINTER THE LENGTH OF THE DIM IS STORED IN THE FIRST CELL
Is this code open source in some way, if so what license are you using?
Line 275 has:
if (sf==stdin) printf("%d> ",lnum+1,stdout);
The stdout argument looks superfluous -- I suggest removing.
Hello, what about sample for using
int (*funhook)(char *kwd, int n); /* FUNCTION CALL HOOK */
?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.