Introduction

ArnoldC is an imperative programming language, built by Ihartik, where the basic keywords are replaced with quotes from different Schwarzenegger movies. Parsing is done with Parboiled and ASM is used to generate the Java bytecode.

Main Method

Every ArnoldC program must have a main method. The form is:

IT'S SHOWTIME [statements] YOU HAVE BEEN TERMINATED

The simplest possible ArnoldC program that does nothing

IT'S SHOWTIME YOU HAVE BEEN TERMINATED

Print Statements

he statement TALK TO THE HAND is used to print strings or variables. Printing a string:

TALK TO THE HAND "happy families are all alike"

Printing a variable:

TALK TO THE HAND myvar

Declaring Variables

The only variable type in ArnoldC is a 16bit signed integer. A value must be given to the variable when it is declared.

HEY CHRISTMAS TREE variablename YOU SET US UP initialvalue

The "macros" @I LIED and @NO PROBLEMO correspond to the values 0 and 1

Initialising two variables with the values of 0 and 1

HEY CHRISTMAS TREE varFalse YOU SET US UP @I LIED HEY CHRISTMAS TREE varTrue YOU SET US UP @NO PROBLEMO

Assigning variables

Variable assignment is done using the pattern

GET TO THE CHOPPER myvar HERE IS MY INVITATION firstOperand [operations] ENOUGH TALK

The HERE IS MY INVITATION sets a value on the top of the stack. The rest of the operations always apply to the current value of the stack which is finally assigned to the myvar variable.

Arithmetic Operations

Addition:

GET UP operand

Substraction:

GET DOWN operand

Multiplication:

YOU'RE FIRED operand

Division:

HE HAD TO SPLIT operand

All arithmetic operations have the same precedence.

Example: a = (4 + b) * 2

GET TO THE CHOPPER a HERE IS MY INVITATION 4 GET UP b YOU'RE FIRED 2 ENOUGH TALK

Logical operations

True statements result the value of 1 and false statements the value of 0.

Equal tpYOU ARE NOT YOU YOU ARE ME operand

Greater thanLET OFF SOME STEAM BENNET operand

OrCONSIDER THAT A DIVORCE operand

AndKNOCK KNOCK operand

Example: a = (b + 5) > c

GET TO THE CHOPPER a HERE IS MY INVITATION b GET UP 5 LET OFF SOME STEAM BENNET c ENOUGH TALK

Example: a = (b || c) && d

GET TO THE CHOPPER a HERE IS MY INVITATION b CONSIDER THAT A DIVORCE c KNOCK KNOCK d ENOUGH TALK

Condition Statements

The condition branch is executed if the value is anything other than 0.

Ifif (value) [statements]

BECAUSE I'M GOING TO SAY PLEASE value [statements] YOU HAVE NO RESPECT FOR LOGIC

If/Elseif (value) [statements] else [statements]

BECAUSE I'M GOING TO SAY PLEASE value [statements] BULLSHIT [statements] YOU HAVE NO RESPECT FOR LOGIC

Example

The statement:

if(a) print "a is true" else print "a is not true"

Translates to:

BECAUSE I'M GOING TO SAY PLEASE a TALK TO THE HAND "a is true" BULLSHIT TALK TO THE HAND "a is not true" YOU HAVE NO RESPECT FOR LOGIC

Example:

The value of the condition statement must be calculated beforehand if(a > b) print "a is greater than b"

GET TO THE CHOPPER result HERE IS MY INVITATION a LET OFF SOME STEAM BENNET b ENOUGH TALK BECAUSE I'M GOING TO SAY PLEASE result TALK TO THE HAND "a is greater b" YOU HAVE NO RESPECT FOR LOGIC

Loops

A While loop can be implemented the following way:

STICK AROUND value [statements] CHILL

Example

A full program printing numbers 1-10

IT'S SHOWTIME HEY CHRISTMAS TREE isLessThan10 YOU SET US UP @NO PROBLEMO HEY CHRISTMAS TREE n YOU SET US UP 0 STICK AROUND isLessThan10 GET TO THE CHOPPER n HERE IS MY INVITATION n GET UP 1 ENOUGH TALK TALK TO THE HAND n GET TO THE CHOPPER isLessThan10 HERE IS MY INVITATION 10 LET OFF SOME STEAM BENNET n ENOUGH TALK CHILL YOU HAVE BEEN TERMINATED

Methods

Methods must be defined outside the main method. The method arguments are defined with I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE arg. The one-liner must be added for each argument separately. GIVE THESE PEOPLE AIR at the end of the "method declaration" indicates the method is non-void. I'LL BE BACK is the keyword for RETURN and it can take an operand depending whether the method is void or not.

A void method:

LISTEN TO ME VERY CAREFULLY methodName [Statements] HASTA LA VISTA, BABY

A non-void method that takes two parameteres:

LISTEN TO ME VERY CAREFULLY methodName I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE arg1 I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE arg2 GIVE THESE PEOPLE AIR [Statements] HASTA LA VISTA, BABY

More Examples

Feature Examples:

More examples can be found from the test package

Printing squares from 1 to 10:

IT'S SHOWTIME HEY CHRISTMAS TREE limit YOU SET US UP 10 HEY CHRISTMAS TREE index YOU SET US UP 1 HEY CHRISTMAS TREE squared YOU SET US UP 1 HEY CHRISTMAS TREE loop YOU SET US UP @NO PROBLEMO STICK AROUND loop GET TO THE CHOPPER squared HERE IS MY INVITATION index YOU'RE FIRED index ENOUGH TALK TALK TO THE HAND squared GET TO THE CHOPPER loop HERE IS MY INVITATION limit LET OFF SOME STEAM BENNET index ENOUGH TALK GET TO THE CHOPPER index HERE IS MY INVITATION index GET UP 1 ENOUGH TALK CHILL YOU HAVE BEEN TERMINATED

Declaring a modulo function and using it from the main method:

IT'S SHOWTIME HEY CHRISTMAS TREE result1 YOU SET US UP 0 HEY CHRISTMAS TREE result2 YOU SET US UP 0 HEY CHRISTMAS TREE result3 YOU SET US UP 0 HEY CHRISTMAS TREE result4 YOU SET US UP 0 GET YOUR ASS TO MARS result1 DO IT NOW modulo 9 4 TALK TO THE HAND result1 GET YOUR ASS TO MARS result2 DO IT NOW modulo 4795 87 TALK TO THE HAND result2 GET YOUR ASS TO MARS result3 DO IT NOW modulo 3978 221 TALK TO THE HAND result3 GET YOUR ASS TO MARS result4 DO IT NOW modulo 5559 345 TALK TO THE HAND result4 YOU HAVE BEEN TERMINATED LISTEN TO ME VERY CAREFULLY modulo I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE dividend I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE divisor GIVE THESE PEOPLE AIR HEY CHRISTMAS TREE quotient YOU SET US UP 0 HEY CHRISTMAS TREE remainder YOU SET US UP 0 HEY CHRISTMAS TREE product YOU SET US UP 0 GET TO THE CHOPPER quotient HERE IS MY INVITATION dividend HE HAD TO SPLIT divisor ENOUGH TALK GET TO THE CHOPPER product HERE IS MY INVITATION divisor YOU'RE FIRED quotient ENOUGH TALK GET TO THE CHOPPER remainder HERE IS MY INVITATION dividend GET DOWN product ENOUGH TALK I'LL BE BACK remainder HASTA LA VISTA, BABY

Check FizzBuzz Implementation here.