编译:
所以我们应先多加了解多种程序设计语言。
编译程序是高级语言的支撑基础,是计算机系统中重要的系统软件之一。编译程序的功能是把高级语言源程序翻译成等价的第几语言目标程序。
编译就是把高级语言变成计算机可以识别的2进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。编译程序把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
源程序是有一些基本符号构成的,我们在运行这个程序时 ,先编译,若某处有错误,就报错,无错误就运行。编译 程序在编译时,先将程序中的单词一个个分离出来,登记 在一个表中,这叫词法分析,然后检查语句格式,叫做语 法分析。然后检查类型是否一致,计算表达是的值叫语义分析。
怎么学编译原理呢?
一.百度上有这样一条回答:离散数学-》数据结构-》操作系统-》汇编原理-》编译原理,从这几个科目入手,学好学扎实,因为编译原理涉及的知识比较广。
二.当然也有笔者回答出了一条路线:1.先利用ANTLR之类的编译器生成工具,做一个小程序(如上面提到的HTML文件转化成纯文本文件的程序),所需知识只是正则表达式的基本知识和生成工具本身的使用方法(可以看联机帮助和网上教程(tutorial)来掌握). 这样做的好处是: 1)可以体会到编译原理的实用性,提高学习兴趣 2)入门容易,消除编译原理学习的畏难情绪. 3)获得词法分析器和语法分析器的感性认识,有利于加深对理论的理解. 4)获得编译器自动生成工具(compiler compiler)的使用经验,提高解决实际问题的能力.(实际工作很多都不是手编而是利用工具的) 2.象ANTLR之类的工具是开源(open source)的,可研究其源码,以便必要时自己手编分析程序. 3.回过头来看编译原理教材. 这时大概会发现,很多理论很容易懂,剩下的只有上面说的几个难点,多看几遍,重点突破. 4.结合教材所附源码,进一步加深对教材的理解 这里顺便提一下,有的编译原理的教材,对于输入子系统不单立一章来讲,有的甚至完全忽略,笔者认为, 输入子系统相对于词法分析器和语法分析器来说当然简单地多,但也是两者的基础,故有必要看源码来理解.在这方面,ANTLR的实现机制和Lex是不同的(当然和java与c的差异有关),可对照着看.
现在,刚刚接触编译原理这一科目,还没学如何写一个编译器,所以,也是有点迷茫,有点空。我自己的思路差不多如下:首先,我们要确定自己要写一个什么语言的编译器,例如写一个C语言的编译器,那么,我们应该熟悉C语言的语法规则,先看懂源程序的词法,并判断源程序是否错误。接着,根据词法,去理解源程序中的语句,以及函数的功能,从而简化代码,减少计算机计算压力,接着把源程序的代码,一一编译成机器能看懂的机器语言也就是二进制语言,存放在某文档中。最后,将该文档内容导入运行程序,执行,输出结果,即编译完成。
毫无科学依据的胡言乱语,估计老师忍不住要笑了吧。