develooper Front page | perl.perl6.internals | Postings from March 2002

Some weekend fun: BASIC for Parrot

Thread Next
From:
Clinton A. Pierce
Date:
March 23, 2002 10:04
Subject:
Some weekend fun: BASIC for Parrot
Message ID:
5.1.0.14.2.20020323125009.00adf738@www.geeksalad.org
For your weekend entertainment, here's a bit of parrot assembler for the 
adventurous to play with.  To get the code, just head to: 
http://geeksalad.org/basic and download the latest tar bundle you 
find.  The README.basic file included in the tar bundle is listed after this.

[Small amount of begging: someone please, please, please fix the I/O in 
Parrot!  :)]

DESCRIPTION
-----------
This is the initial (.01?) release of a BASIC interpreter written
entirely in Parrot bytecode.  The NOTES below are intended for Parrot
developers.

This BASIC is of the fairly old school.  Line numbers are required, and
the following keywords are recognized:

	LIST
	LIST expr-expr
	RUN
	PRINT
	PRINT expr
	PRINT expr;   [supress newline]
	DIM stringvar(expr)
	LET var=expr
	FOR var=expr TO expr
	FOR var=expr TO expr STEP expr
	GOSUB expr
	RETURN
	GOTO expr
	GO TO expr    [syn with GOTO]
	IF expr conditional expr THEN STATEMENT
	END
	REM
	QUIT          [exits interpreter]

	* String variables are noted with a trailing $ (as in A$)
	* Variable names are \w characters up to 8 in length (compile directive)
	* GOSUB/FOR-NEXT may be nested to arbitrary depths.
	* Line numbers are positive integers, up to 8-digits in length
	* Expressions are evaluated left-to-right with no thought given
	  to precedence.  They can be string literals or numeric with a
	  mixture of operators (*+-/) and values.
	* Conditionals are >, <, =, or ! (not equal)
	* Everything is case-sensitive
	* Extra things on the end of a line are often ignored.

This was intended as a true interactive BASIC (see NOTES below) so that
any of the variables and statements work from the prompt as well as in the
body of the stored program.  Entering in a new line number overwrites the line
in the existing program
	

Included in this distribution are the following files, some of which may be
of general interest, some only apply to BASIC:

	alpha.pasm		Alpha/Numeric library
	dumpstack.pasm		Diagnostic stack dumping
	expressions.pasm	Expression evaluator
	stackops.pasm		Stack operations
	tokenize.pasm	  	A simple string tokenizer

	basic.pasm		The instruction dispatcher
	basicvar.pasm		Storage/Retrieval of BASIC strings, numbers, code
	instructions.pasm	BASIC instructions
	test.bas		Small BASIC example

	basic.pl		Perl Harness for compiling, starting BASIC in non-interactive
				mode (see NOTES).  A small sample set of commands is embedded
			        in the file.
	basic_io.pl		Harness for compiling, starting BASIC in interactive
				mode (see NOTES).  Not quite finished.

The interactive mode isn't complete, and INPUT still needs to be implemented
(see NOTES).  Otherwise this should be fairly functional.


NOTES
-----
Parrot's I/O is really broken now.  With all of the registers, stacks, and 
code involved
here doing any kind of I/O breaks BASIC very quickly.  As a self-contained 
program it's
fairly robust.

There's no INPUT statement (yet) and the interactive BASIC doesn't 
work.  I'd really
like both of these to work.  It doesn't feel like BASIC without a friendly 
"Ok>" or
"Ready" prompt.  :)

Included with the distribution is basic_io.pl which attempts to read 
instructions from
STDIN (fd 0).   If you can get this to work *consistently* with larger 
BASIC programs
(i.e. lots and lots of I/O) let me know, I'd really appreciate it.  Try:

	basic_io.pl < test.bas

For a taste of SEGV.


CONTACT
-------
Clinton Pierce <clintp@geeksalad.org>
"clintp" irc.rhizomatic.net #perl or #parrot


LICENSE
-------
Redistributable under the terms of any current version of Perl


Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About