Useless embedded DSL and monadic interpreter for BASIC.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
project
src/main/scala/org/tpolecat/basic
.gitignore
README.md
build.sbt

README.md

Embedded BASIC

This is an embedded DSL and pure monadic interpreter for the execrable BASIC language. It's useless but kind of interesting. Still a work in progress, but you can write real programs as things stand. The examples/ directory has a playable game that I typed in from a book written in 1978.

Quick Start

You can run the examples via sbt run. Other than that, check the code out I guess.

An Example

This is Scala code.

import org.tpolecat.basic.BASIC

object HelloWorld extends App {

  val b = new BASIC {

    10 PRINT "HELLO WORLD"
    20 INPUT "WHAT IS YOUR NAME?" AS N$
    30 INPUT "HOW MANY TIMES SHALL I PRINT IT?" AS N
    40 IF N <> INT(N) THEN 30
    50 IF N < 1 THEN 30
    60 PRINT "OK THEN:"
    70 FOR I IN 1 TO N
    80 PRINT N$
    90 NEXT I
    95 PRINT "BYE."

  }

  b.run.unsafePerformIO()

}

Known Issues

Where shall I begin? First of all, this thing runs BASIC, which can be considered a bug by definition. By other than that:

  • The embedded DSL can be improved to support more syntax, and make existing syntax look more natural. This is boring so I haven't spent much time on it.
  • The implementation is mostly pure, but there's a var in BASIC.scala and I'm not sure how to get rid of it without messing up the surface syntax.
  • Many many other things I haven't thought about.