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 <[EMAIL PROTECTED]>
"clintp" irc.rhizomatic.net #perl or #parrot


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

Reply via email to