ArnoldC:關鍵字出自斯瓦辛格電影的趣味編程語言
英文原文:ArnoldC
ArnoldC 是一種命令式編程語言,其基本的關鍵字均出自阿諾·斯瓦辛格的電影。該語言編寫的程序可用 Parboiled 和 ASM 解析成 Java 字節碼。
下面一起來看看如何使用這種蛋疼趣味語言。
Main 方法
每個 ArnoldC 程序必須有一個 main 方法。如下:
IT'S SHOWTIME [語句] YOU HAVE BEEN TERMINATED
最簡單的 ArnoldC 程序如下:
IT'S SHOWTIME YOU HAVE BEEN TERMINATED
語句
輸出
TALK TO THE HAND 語句用于打印輸出字符串或變量。打印字符串:
TALK TO THE HAND "cnblogs"
打印變量:
TALK TO THE HAND myvar
聲明變量
ArnoldC 語言中唯一的變量類型是 16 位的有符號整數。必須在聲明時賦值。
HEY CHRISTMAS TREE variablename
YOU SET US UP initialvalue
@I LIED 和 @NO PROBLEMO 這兩個“宏” 對應的值是 0 和 1
聲明兩個變量,值分別是 0 和 1
HEY CHRISTMAS TREE varFalse
YOU SET US UP @I LIED
HEY CHRISTMAS TREE varTrue
YOU SET US UP @NO PROBLEMO
變量賦值
變量賦值語句用如下格式:
GET TO THE CHOPPER myvar
HERE IS MY INVITATION firstOperand
[operations]
ENOUGH TALK
HERE IS MY INVITATION 用來對棧頂的變量做賦值。經過其他操作,最終賦值給變量 myvar。
算術操作
加法
GET UP operand
減法
GET DOWN operand
乘法
YOU'RE FIRED operand
除法
HE HAD TO SPLIT operand
所有算術操作優先級同一樣。比如: a = (4 + b) * 2
GET TO THE CHOPPER a HERE IS MY INVITATION 4 GET UP b YOU'RE FIRED 2 ENOUGH TALK
邏輯操作
真語句的值為 1,假語句的值為 0。
等于
YOU ARE NOT YOU YOU ARE ME operand
大于
LET OFF SOME STEAM BENNET operand
或
CONSIDER THAT A DIVORCE operand
與
KNOCK KNOCK operand
比如: 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
比如 a = (b c) && d
GET TO THE CHOPPER a
HERE IS MY INVITATION b
CONSIDER THAT A DIVORCE c
KNOCK KNOCK d
ENOUGH TALK
條件語句
如果 value 非0,執行條件分支
If
if (value) [statements] BECAUSE I'M GOING TO SAY PLEASE value [statements] YOU HAVE NO RESPECT FOR LOGIC
If Else
if (value) [statements] else [statements] BECAUSE I'M GOING TO SAY PLEASE value [statements] BULLSHIT [statements] YOU HAVE NO RESPECT FOR LOGIC
例1
if(a) print "a is true" else print "a is not true" 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
例 2 條件語句的值必須先計算 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
While
STICK AROUND value
[statements]
CHILL
例子 打印 1 到 10
IT'S SHOWTIME HEY CHRISTMAS TREE isLessThan10 YOU SET US UP @NO PROBLEMO HEY CHRISTMAS TREE n YOU SET US UP 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
方法
方法必須在主函數外定義。方法參數用 I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE 定義。每個變量必須單獨定義。GET YOUR ASS TO MARS 放在方法申明末尾,表明該方法是非空方法。I’LL BE BACK 就是 RETURN,根據方法是否為空,可以帶一個變量。
空方法
LISTEN TO ME VERY CAREFULLY methodName
[Statements]
HASTA LA VISTA, BABY
一個帶兩個參數的非空方法
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
GET YOUR ASS TO MARS
[Statements]
HASTA LA VISTA, BABY
典型示例
更多例子可以在測試包中查看
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
申明一個 modulo 函數,并在主函數調用它
IT'S SHOWTIME HEY CHRISTMAS TREE result1 YOU SET US UP HEY CHRISTMAS TREE result2 YOU SET US UP HEY CHRISTMAS TREE result3 YOU SET US UP HEY CHRISTMAS TREE result4 YOU SET US UP 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 HEY CHRISTMAS TREE remainder YOU SET US UP HEY CHRISTMAS TREE product YOU SET US UP 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
譯文鏈接: http://blog.jobbole.com/60440/