Right now it's intripreted, but I wrote a bloody huge intripreter in QBasic that does these things in order.
It makes a copy of the code, so now it had 2 copys, vmbprgm and v_p both strings
It looks for and registers all :s in a list
It then looks for any error causing code (like : (9,1"hehe") and removes it (thus making error free running for the most part, if it is told to do something error causing it skips that line and stores it to the log)
It then looks for redundant code such as :z?z or :+z1-z1?z and removes those
Now it's ready to run, it then looks over the code once more to find anything that needs removed to ensure proper running
It stores all removal and changes to vmberr.txt and runs, if it encounters an error whilst running it also amends the logs
The only problem is that it isn't all that fast >_> yet, and that if you enter an improper program it can loop forever... I'm also adding support for "custom" commands defined before the first :