ArnoldC:关键字出自斯瓦辛格电影的趣味编程语言

开发 后端 开发工具
ArnoldC 是一种命令式编程语言,其基本的关键字均出自阿诺·斯瓦辛格的电影。该语言编写的程序可用 Parboiled 和 ASM 解析成Java字节码。

ArnoldC 是一种命令式编程语言,其基本的关键字均出自阿诺·斯瓦辛格的电影。该语言编写的程序可用 Parboiled 和 ASM 解析成 Java 字节码。

下面一起来看看如何使用这种(蛋疼)趣味语言。

[[109317]]

 

Main 方法

每个 ArnoldC 程序必须有一个main 方法。如下:

  1. IT'S SHOWTIME 
  2. [语句] 
  3. YOU HAVE BEEN TERMINATED 

最简单的 ArnoldC 程序如下:

  1. IT'S SHOWTIME 
  2. YOU HAVE BEEN TERMINATED 

语句

输出

TALK TO THE HAND  语句用于打印输出字符串或变量。打印字符串:

  1. TALK TO THE HAND "jobbole" 

打印变量:     

  1. TALK TO THE HAND myvar 

声明变量

ArnoldC 语言中唯一的变量类型是 16 位的有符号整数。必须在声明时赋值。

  1. HEY CHRISTMAS TREE variablename 
  2. YOU SET US UP initialvalue 

@I LIED 和 @NO PROBLEMO 这两个“宏” 对应的值是  0 和 1

声明两个变量,值分别是 0 和 1

  1. HEY CHRISTMAS TREE varFalse 
  2. YOU SET US UP @I LIED 
  3. HEY CHRISTMAS TREE varTrue 
  4. YOU SET US UP @NO PROBLEMO 

变量赋值

变量赋值语句用如下格式:

  1. GET TO THE CHOPPER myvar 
  2. HERE IS MY INVITATION firstOperand 
  3. [operations] 
  4. ENOUGH TALK 

HERE IS MY INVITATION 用来对栈顶的变量做赋值。经过其他操作,最终赋值给变量 myvar。

算术操作

加法

  1. GET UP operand 

减法

  1. GET DOWN operand 

乘法

  1. YOU'RE FIRED operand 

除法

  1. HE HAD TO SPLIT operand 

所有算术操作优先级同一样。比如: a = (4 + b) * 2

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

#p#

逻辑操作

真语句的值为 1,假语句的值为 0。

等于

  1. YOU ARE NOT YOU YOU ARE ME operand 

大于

  1. LET OFF SOME STEAM BENNET operand 

  1. CONSIDER THAT A DIVORCE operand 

  1.      
  2. KNOCK KNOCK operand 

比如: a = (b + 5) > c

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

比如 a = (b || c) && d

  1. GET TO THE CHOPPER a 
  2. HERE IS MY INVITATION b 
  3. CONSIDER THAT A DIVORCE c 
  4. KNOCK KNOCK d 
  5. ENOUGH TALK 

条件语句

如果 value 非0,执行条件分支

If

  1. if (value) [statements] 
  1. BECAUSE I'M GOING TO SAY PLEASE value 
  2. [statements] 
  3. YOU HAVE NO RESPECT FOR LOGIC 

If Else

  1. if (value) [statements] else [statements] 
  1. BECAUSE I'M GOING TO SAY PLEASE value 
  2. [statements] 
  3. BULLSHIT 
  4. [statements] 
  5. YOU HAVE NO RESPECT FOR LOGIC 

例1

  1. if(a) print "a is true" 
  2.  else print "a is not true"
  1. BECAUSE I'M GOING TO SAY PLEASE a 
  2.  TALK TO THE HAND "a is true" 
  3.  BULLSHIT 
  4.  TALK TO THE HAND "a is not true" 
  5.  YOU HAVE NO RESPECT FOR LOGIC 

例2  条件语句的值必须先计算 if(a > b) print “a is greater than b”

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

While

  1. STICK AROUND value 
  2.  [statements] 
  3.  CHILL 

例子  打印 1 到 10

  1. IT'S SHOWTIME 
  2. HEY CHRISTMAS TREE isLessThan10 
  3. YOU SET US UP @NO PROBLEMO 
  4. HEY CHRISTMAS TREE n 
  5. YOU SET US UP 0 
  6. STICK AROUND isLessThan10 
  7. GET TO THE CHOPPER n 
  8. HERE IS MY INVITATION n 
  9. GET UP 1 
  10. ENOUGH TALK 
  11. TALK TO THE HAND n 
  12. GET TO THE CHOPPER isLessThan10 
  13. HERE IS MY INVITATION 10 
  14. LET OFF SOME STEAM BENNET n 
  15. ENOUGH TALK 
  16. CHILL 
  17. YOU HAVE BEEN TERMINATED 

方法

方法必须在主函数外定义。方法参数用 I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE 定义。每个变量必须单独定义。GET YOUR ASS TO MARS 放在方法申明末尾,表明该方法是非空方法。I’LL BE BACK 就是 RETURN,根据方法是否为空,可以带一个变量。

空方法

  1. LISTEN TO ME VERY CAREFULLY methodName 
  2. [Statements] 
  3. HASTA LA VISTA, BABY 

#p#

一个带两个参数的非空方法

  1. LISTEN TO ME VERY CAREFULLY methodName 
  2. I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE arg1 
  3. I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE arg2 
  4. GET YOUR ASS TO MARS 
  5. [Statements] 
  6. HASTA LA VISTA, BABY 

典型示例

更多例子可以在测试包中查看

Printing squares from 1 to 10

  1. IT'S SHOWTIME 
  2. HEY CHRISTMAS TREE limit 
  3. YOU SET US UP 10 
  4. HEY CHRISTMAS TREE index 
  5. YOU SET US UP 1 
  6. HEY CHRISTMAS TREE squared 
  7. YOU SET US UP 1 
  8. HEY CHRISTMAS TREE loop 
  9. YOU SET US UP @NO PROBLEMO 
  10. STICK AROUND loop 
  11. GET TO THE CHOPPER squared 
  12. HERE IS MY INVITATION index 
  13. YOU'RE FIRED index 
  14. ENOUGH TALK 
  15. TALK TO THE HAND squared 
  16. GET TO THE CHOPPER loop 
  17. HERE IS MY INVITATION limit 
  18. LET OFF SOME STEAM BENNET index 
  19. ENOUGH TALK 
  20. GET TO THE CHOPPER index 
  21. HERE IS MY INVITATION index 
  22. GET UP 1 
  23. ENOUGH TALK 
  24. CHILL 
  25. YOU HAVE BEEN TERMINATED 

申明一个 modulo 函数,并在主函数调用它

  1. IT'S SHOWTIME 
  2. HEY CHRISTMAS TREE result1 
  3. YOU SET US UP 0 
  4. HEY CHRISTMAS TREE result2 
  5. YOU SET US UP 0 
  6. HEY CHRISTMAS TREE result3 
  7. YOU SET US UP 0 
  8. HEY CHRISTMAS TREE result4 
  9. YOU SET US UP 0 
  10. GET YOUR ASS TO MARS result1 
  11. DO IT NOW modulo 9 4 
  12. TALK TO THE HAND result1 
  13. GET YOUR ASS TO MARS result2 
  14. DO IT NOW modulo 4795 87 
  15. TALK TO THE HAND result2 
  16. GET YOUR ASS TO MARS result3 
  17. DO IT NOW modulo 3978 221 
  18. TALK TO THE HAND result3 
  19. GET YOUR ASS TO MARS result4 
  20. DO IT NOW modulo 5559 345 
  21. TALK TO THE HAND result4 
  22. YOU HAVE BEEN TERMINATED 
  23. LISTEN TO ME VERY CAREFULLY modulo 
  24. I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE dividend 
  25. I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE divisor 
  26. GIVE THESE PEOPLE AIR 
  27. HEY CHRISTMAS TREE quotient 
  28. YOU SET US UP 0 
  29. HEY CHRISTMAS TREE remainder 
  30. YOU SET US UP 0 
  31. HEY CHRISTMAS TREE product 
  32. YOU SET US UP 0 
  33. GET TO THE CHOPPER quotient 
  34. HERE IS MY INVITATION dividend 
  35. HE HAD TO SPLIT divisor 
  36. ENOUGH TALK 
  37. GET TO THE CHOPPER product 
  38. HERE IS MY INVITATION divisor 
  39. YOU'RE FIRED quotient 
  40. ENOUGH TALK 
  41. GET TO THE CHOPPER remainder 
  42. HERE IS MY INVITATION dividend 
  43. GET DOWN product 
  44. ENOUGH TALK 
  45. I'LL BE BACK remainder 
  46. HASTA LA VISTA, BABY 

原文链接:https://github.com/lhartikk/ArnoldC/wiki/ArnoldC

译文链接:http://blog.jobbole.com/60440/

责任编辑:陈四芳 来源: 伯乐在线
相关推荐

2022-01-10 18:11:42

C语言应用技巧

2021-03-10 15:59:39

JavaSynchronize并发编程

2009-06-29 12:58:47

This关键字java

2023-03-24 08:01:27

Go语言内存

2011-05-17 13:04:20

Cconst

2023-06-26 08:02:34

JSR重排序volatile

2015-11-10 16:10:22

C语言StaticConst

2022-05-06 08:32:40

Pythonwith代码

2021-02-01 13:10:07

Staticc语言UNIX系统

2022-02-17 08:31:38

C语言staic关键字

2024-03-15 15:12:27

关键字底层代码

2022-11-12 18:32:50

Golangomitemptyjson

2022-01-04 16:35:42

C++Protected关键字

2009-09-17 09:30:00

Linq LET关键字

2009-09-02 09:24:03

C# this关键字

2012-03-01 12:50:03

Java

2009-08-21 14:58:56

C# this关键字

2018-04-20 15:56:09

Pythonglobal关键字

2013-01-30 10:12:14

Pythonyield

2016-09-19 21:53:30

Java并发编程解析volatile
点赞
收藏

51CTO技术栈公众号