说爱你不容易——编译器之咆哮体





现在很流行咆哮体。我们让编译器也咆哮起来吧!
昨天是5月20日,借此特殊的日子,我们把以下简单的代码给GCC去编译看看效果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#define LOVE 2
#define YSYS 1314
 
void biaobai(int I, int love, int you) {
 YiShengYiShi = YSYS;
 printf("%d %d %d %d\n", I, love, you, YiShengYiShi);
}
 
int main() {
 int I = 5;
 int you = 0
 love = LOVE;
 BiaoBai(I, love, you);
 return 0;
}

我写了一个很简易的咆哮版GCC编译器,它得到上述代码后开始咆哮了!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ ./pxgcc hello.cpp  
hello.cpp
函数'void biaobai(int, int, int)'出问题了阿!!!有木有阿!!!
 
hello.cpp
轮到第6行了阿!!!
错起来木有完了阿!!!有木有阿!!!
'YiShengYiShi'还没定义就尼玛要用,用个毛阿!!!!
函数'int main()'出问题了阿!!!有木有阿!!!
 
hello.cpp
快看第13行拉!!
错起来木有完了阿!!!有木有阿!!!
'love'前面又缺了东西阿!!!
轮到第14行了阿!!!
又尼玛出错拉!!
'love'还没有定义就冒出来了阿!!!有木有阿!!!
轮到第14行了阿!!!
又尼玛出错拉!!
你先告诉我'BiaoBai'是什么你再'BiaoBai'阿!!!

附上简易咆哮版GCC编译器代码,需要在Linux环境下使用,并且安装了GCC等必要工具。我使用的是Ubuntu 9.04,GCC4.3.3,其他平台下的效果不确定。
本文仅供娱乐,希望能让大家在每天紧张的编程中得到放松。
注:此帖发在百度贴吧中http://tieba.baidu.com/f?kz=1085687510 参与百度之星趣味赛,如果觉得本文还不错的话,欢迎到百度贴吧里顶帖,谢谢。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/bin/bash
export LANG=en_US
 
str=$( gcc $@ 2>&1 )
 
OLD_IFS="$IFS"
IFS=":"
arr=($str)
 
for s in ${arr[@]}
do
    s=`echo $s | sed 's/^\s*//g'`
    s=`echo $s | sed 's/\s*$//g'`
 
    r=$(($RANDOM % 3))
 
    if echo $s | egrep -q "^[0-9]+"
    then
        case $r in
        0) echo "快看第$s行拉!!" 
        ;;
        1) echo "第$s行好像不对劲拉!!!"
        ;;
        2) echo "轮到第$s行了阿!!!"
        ;;
        esac
    elif test "$s" == "error"
    then
        case $r in
        0) echo "又尼玛出错拉!!" 
        ;;
        1) echo "怎么又来错了阿!!!有木有!!!"
        ;;
        2) echo "错起来木有完了阿!!!有木有阿!!!"
        ;;
        esac
    elif echo $s | egrep -q "^In function '[^']*'$"
    then
        f=`echo $s | grep -Eo "'[^']*?'$"`
        case $r in
        0) echo "去看函数"$f"阿!!" 
        ;;
        1) echo "函数$f出问题了阿!!!有木有阿!!!"
        ;;
        2) echo "写个函数$f都写不对阿!!!有木有!!"
        ;;
        esac
    elif echo $s | egrep -q "was not declared"
    then
        v=`echo $s | grep -Eo "'[^']*?'"`
        case $r in
        0) echo $v'还没定义就尼玛要用,用个毛阿!!!!'
        ;;
        1) echo $v'还没有定义就冒出来了阿!!!有木有阿!!!'
        ;;
        2) echo "你先告诉我$v是什么你再$v阿!!!"
        ;;
        esac
 
    elif echo $s | egrep -q "^expected \`[^']*' before .*'$"
    then
        v=`echo $s | grep -Eo "'[^' ]*?'\s*$"`
        case $r in
        0) echo $v'前面是不是应该有个什么东西阿!!!'
        ;;
        1) echo "$v前面是不是少东西了!!!有木有!!!"
        ;;
        2) echo "$v前面又缺了东西阿!!!"
        ;;
        esac
    elif echo $s | egrep -q "^expected .* before .*'$"
    then
        v=`echo $s | grep -Eo "'[^' ]*?'\s*$"`
        case $r in
        0) echo $v'前面是不是应该有个什么东西阿!!!'
        ;;
        1) echo "$v前面是不是少东西了!!!有木有!!!"
        ;;
        2) echo "$v前面又缺了东西阿!!!"
        ;;
        esac
    else
        echo $s
    fi
done
本文来自Dora Blog,题目为说爱你不容易——编译器之咆哮体,转载请注明出处。
如果你喜欢我的博客,请订阅本博客的RSS以更方便的阅读
欢迎关注我的新浪微博:http://weibo.com/diaorui1987