The BETTIE programming language


Home

As Roberto Waltman rightly said: "Wonderful! What the world needs is one more language that allows you to write:

"IF IF THEN THEN ELSE IF ELSE THEN IF ELSE IF END THEN BEGIN ELSE IF;"

or something like that..."

He's right, of course, so I hereby present a compiler for the BETTIE language. BETTIE is an acronym for BEGIN, ELSE, THEN, er, THEN, right, IF, END.

The compiler is written in C. Translation to BETTIE is left as an exercise. After the compiler source listing, you'll find a 'Hello, world' program written in BETTIE.



/* BETTIE Compiler

   The BETTIE (Begin/Else/Then/er, Then/If/End) language
   has five keywords: BEGIN, ELSE, THEN, IF, and END.

   I'll let you figure out the semantics for yourself.

   Richard Heathfield, 1 July 2008
 */


#include <stdio.h>
#include <string.h>

#define LW 16

int t(unsigned long int n)
{
  static unsigned long l = 0;
  char x[] = "Oh? Oh! Oh okay.";
  l==0 || putchar(' ');
  putchar(x[(n & 0xFF000000) >> 24]);
  putchar(x[(n & 0xFF0000) >> 16]);
  putchar(x[(n & 0xFF00) >> 8]);
  putchar(x[n & 0xFF]);
  ++l==LW && putchar('\n');
  l%=LW;
  return 1;
}

int main(void)
{
  char i[256] = {0};
  int ms = 0;
  while(1 == scanf("%255s", i))
  {
    if(strcmp(i, "ELSE") == 0)
    {
      ms = !ms;
    }
    else
    {
      if(strcmp(i, "BEGIN") == 0)
      {
        (ms && t(0xB0C0F) && t(0xB0C06)) ||
              (t(0xB0C06) && t(0xB0C02));
      }
      else if(strcmp(i, "END") == 0)
      {
        (ms && t(0xB0C06) && t(0xB0C0F)) ||
              (t(0xB0C02) && t(0xB0C06));
      }
      else if(strcmp(i, "THEN") == 0)
      {
        (ms && t(0xB0C0F) && t(0xB0C02)) ||
              (t(0xB0C02) && t(0xB0C0F));
      }
      else if(strcmp(i, "IF") == 0)
      {
        (ms && t(0xB0C0F) && t(0xB0C0F)) ||
              (t(0xB0C06) && t(0xB0C06));
      }
      else
      {
        fprintf(stderr, "Syntax error: %s\n", i);
      }
    }
  }
  putchar('\n');
  return 0;
}


Hello World in the BETTIE language

ELSE THEN IF IF IF IF IF IF IF IF IF ELSE BEGIN THEN ELSE IF

IF IF IF IF IF IF IF THEN ELSE IF END THEN ELSE END THEN IF IF

IF IF IF IF IF ELSE BEGIN THEN ELSE IF IF IF IF THEN ELSE IF

END THEN ELSE IF END IF IF IF IF IF IF IF END END IF IF IF END

THEN THEN THEN IF IF IF IF IF IF IF IF ELSE BEGIN THEN ELSE IF

IF IF IF THEN ELSE IF END THEN ELSE END THEN THEN THEN IF IF

IF IF IF IF IF IF IF IF ELSE BEGIN THEN ELSE IF IF IF IF IF IF

IF IF IF THEN ELSE IF END THEN IF IF IF ELSE END ELSE THEN THEN

THEN THEN ELSE END IF IF IF END ELSE IF IF IF IF IF IF ELSE END

ELSE IF IF IF IF IF IF IF IF ELSE END THEN THEN IF END