分享

深入浅出编译原理

 cjzhou 2014-01-10

引言

还是那句话,编译原理比较乏味,所以有一个感性的,直观的认识,很重要。上一节没有做这个事情,这一小节,就以《编译原理》(龙书)里的那个前端的源码为例,感受一下,一个真正的,完整的,我们的手可以摸得到的,编译器前端的工作情况和结果。

分三部分内容:

1》linux下安装JDK,用来编译front。

2》编译front,front的代码,我已经传上来了,在上一篇博客里有具体的下载地址。

3》看结果,小试牛刀。


7.1安装JDK

参考:

http://blog.csdn.net/rital/article/details/5486021

内容如下。

注意:原文中有问题,版本前后不一,本文中已做更正。


Linux下JDK的安装步骤:

 

第一步:改权限
[root@wxr java]# pwd
/usr/java
[root@wxr java]# chomd 755 jdk-6u19-linux-i586.bin
首先更改操作权限,加入写入和执行的权限。

 

 

第二:安装
执行这个jdk-6u19-linux-i586.bin二进制可执行程序,实现安装:
[root@wxr java]# ./jdk-6u19-linux-i586.bin


安装过程提示如下:
Do you agree to the above license terms? [yes or no] 按yes键确定。
之后会出现下面的画面:
Checksumming...
0
0
Extracting...

结束时提示画面:
For more information on what data Registration collects and 
how it is managed and used, see:
http://java./javase/registration/JDKRegistrationPrivacy.html

Press Enter to continue.....
 
Done.


装完就会看到/usr/java下多了一个目录:jdk1.6.0_19

 

第三:设置环境变量
总体来说就是让运行的JAVA命令能找到JAVA的目录路径,知道它安装到哪了。
通常都喜欢用export命令直接在shell下设置:
[root@wxr java]# export JAVA_HOME=/usr/java/jdk1.6.0_19
[root@wxr java]# export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@wxr java]# export PATH=$PATH:$JAVA_HOME/bin

 

的变量。所以最好的方法还是修改.bashrc文件。(/root目录中的.bashrc是个隐含文件。需要ls –a来看)


当然这样设置环境变量是可以生效的,但是只对当前shell生效。如果从另外一个shell登陆,将不能使用刚才设置

 

 

 

以root用户身份修改.bashrc文件,文件末尾增加蓝色字体内容:
[root@wxr ~]# vi .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
export JAVA_HOME=/usr/java/jdk1.6.0_19
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

 

当然也可以通过更改/etc/profile来实现,不过不推荐这么做,因为这样的设置将对所以用户的shell都生效,对系统安全会产生影响。方法如下:

[root@localhost etc]# more /etc/profile

在文件最后加上以下内容即可:

unset i
unset pathmunge
export JAVA_HOME=/usr/java/jdk1.6.0_19

export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 

 

下面来验证一下变量设置是否生效,设置完环境变量最好重起一下,不然看不到效果。
[root@wxr ~]# reboot
[root@wxr ~]# echo $JAVA_HOME
/usr/java/jdk1.6.0_19

这样,说明已经设置好啦~

 

 

 

第四:测试

 

[root@wxr test_temp]# pwd
/usr/test_temp

[root@wxr test_temp]# vi test.java
class test
{
       public static void main(String[] args)
       {
              System.out.println("welcome to my JAVA environment!");
       }
}

保存退出,下面来编译、执行;
[root@wxr test_temp]# javac test.java
[root@wxr test_temp]# java test
welcome to my JAVA environment!
至此,全部JDK安装成功!



7.2 编译

1》cd front

2》make


7.3 牛刀小试

1》把你想要测试的代码放到tests目录下,比如rill.t。以书上P628页的例子为例,如下:




2》执行 java main.Main <tests/rill.t >tmp/rill.i

说明:上面命令中‘<’,是将rill.t的内容作为输入,给main.Main

上面命令中‘>’,是将执行结果输出到rill.i

总之,一句话,重定向,或者叫管道。

3》cat rill.i 查看处理结果

结果如下:



4》如果想同时测试多个文件就执行以下make test,这个看一下Makefile就会明白的。


7.4 小结

可见和书上给出的结果一样。下一步就是试着改一下测试代码,或者改一下这个前端,看一下有什么不同。我相信,编译原理这个东西,这样学起来,或许会更有趣一些。

试一下吧。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多