| 1 | VVhitespace is descended from Whitespace, adding a vertical tab to the language |
| 2 | along with some restrictions to ease implementation. The name is intended to |
| 3 | embrace the spirit of Whitespace's visual incomprehensibility. |
| 4 | |
| 5 | Since Whitespace ignores [VTab] as a comment character, and since the |
| 6 | Whitespace VM is a superset of the VVhitespace VM, all valid VVhitespace |
| 7 | programs are also valid Whitespace programs. |
| 8 | |
| 9 | -------------------------------------------------------------------------------- |
| 10 | |
| 11 | TODO: Finish this up based on what I've found below. |
| 12 | |
| 13 | It seems that all (most?) WS interpreters locate labels using one of two methods. |
| 14 | |
| 15 | * **Method 1** Scan from the start of the file for the first occurence of the |
| 16 | mark-label bytestring and jump. |
| 17 | |
| 18 | * **Method 2** Scan from the start of the file, looking for a mark-label |
| 19 | bytestring, but 'parsing' one bytestring at a time, and jumping to the |
| 20 | first 'standalone' mark-label bytestring. Note that this is different than |
| 21 | executing the program, particularly when user-input commands are present. |
| 22 | |
| 23 | Both of these methods can be broken: |
| 24 | |
| 25 | * Type 1: No 'standalone' label exists. This breaks Method 2. |
| 26 | |
| 27 | This should print a '!' before infinite '.' lines. |
| 28 | |
| 29 | * Type 2: Hidden label before 'standalone' label. This breaks Method 1. |
| 30 | |
| 31 | This should print an infinite chain of '.' lines. |
| 32 | |
| 33 | This is the Type 1 program: |
| 34 | |
| 35 | SSSTSSSSTN | Push +33 (ASCII !) |
| 36 | NSNSTSTTTSN | JMP>label0 |
| 37 | NSSTTTTN | MARK label2 |
| 38 | SSSSN | PUSH +0 |
| 39 | SNN | DROP |
| 40 | SSSTSTTTSN | Push +46 (ASCII .) |
| 41 | TNSS | Output character |
| 42 | SSSTSTSN | Push +10 (ASCII newline) |
| 43 | TNSS | Output character |
| 44 | NSNTTTTN | JMP>label2 |
| 45 | |
| 46 | Append this to turn it into the Type 2 program: |
| 47 | |
| 48 | NSSSTSTTTSN | MARK label0 (2nd time) |
| 49 | NSNTTTTN | JMP>label2 |
| 50 | |
| 51 | WS Interpreter Evaluations: |
| 52 | |
| 53 | Method 1: |
| 54 | whitespacers/c: (c) meth0dz |
| 55 | |
| 56 | Method 2: |
| 57 | whitespacers/ruby: (c) 2003 by Wayne E. Conrad |
| 58 | whitespacers/perl: (c) 2003 Micheal Koelbl |
| 59 | whitespacers/haskell: (c) 2003 Edwin Brady |
| 60 | threeifbywhiskey/satan |