时间:2024-05-04
付叶蔷 河南大学软件学院
编译原理产生于20世纪40年代,由于著名匈牙利裔美籍数学家,计算机科学家,物理学家和化学家冯.诺伊曼在存储程序在计算机方面的领头作用,在计算机中编写一串代码或程序保存在计算机中执行是非常有必要的。起初,这些程序都是用机器语言编写的指令(只有0和1的程序)。机器语言是一种指令集的体系。这种指令集,称机器码,是电脑的CPU可直接解读的数据,机器语言具有灵活、直接执行和速度快等特点。但同时,机器语言大量繁杂琐碎的细节牵制着程序员,所以编写这样的代码充满挑战,非常困难。从而这种代码形式很快被产生于符号语言(汇编语言)编写的程序代替了。随着时间推移和科技发展,用于编译原理的编译器包括了更复杂的算法应用程序,主要用于推断或简化程序中的信息。
词法分析是编译过程的第一个阶段,主要任务是对构成源程序的字符流从左至右进行扫描和分解,把它识别为一个个具有独立意义的最小语法单位,即单词,从而产生一个个的单词符号, 把作为字符串的源程序改造成为单词符号串的中间程序,用于语法分析,因此,词法分析是编译的基础。执行词法分析的程序称为词法分析程序或扫描程序, 它按构词规则识别单词, 将作为字符串的源程序改造成为单词符号串。单词一般采用形如(单词种别, 单词符号的属性值>的二元组形式表示, 其中单词类别是语法分析需要的信息, 而单词自身值则是其他编译阶段需要的信息。编译程序是在单词的级别上来分析和翻译源程序的, 因此,词法分析在编译原理中发挥着首要作用。词法分析程序除了识别单词这个基本任务外, 还可完成如对源程序进行处理, 组织源程序的输入、删除注释等。
词法分析渗透在计算机领域的各个方面。它在软件工程中得到了极为广泛的应用,这主要是由于词法分析特性决定,词法分析是对构成源程序的字符流进行扫描, 然后根据构词规则识别单词符号, 这正是源代码逆向分析过程中重要的的一步。因为,词法分析是机器翻译的第一阶段, 当源语言文本送入计算机后, 首先要进行词法分析, 及输出单词符号,对关键字、标识符、常数、运算符、界符进行分析。这也是完成计算机翻译过程的基础和关键阶段, 此步为接下来的句法分析和目标语言生成奠定了基础, 其准确程度的高低直接影响着句法分析的准确率和译文的准确性。词法分析可以实现软件工程中的构架应用系统和三层构架应用系统中超文本链接的自动测试等。同时,依据词法分析的特性,可以为数据库中数据的获取和存储提供基础,良好的解决了数据库中关键字的建立问题等。
语法分析程序从扫描程序中获取记号形式的源代码,并完成定义程序结构的语法分析 ,这与自然语言中句子的语法分析类似。语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则。可以粗略地把语法分析分成两类,一类是自上而下分析法,一类是自下而上分析法。自上而下,及从文法的开始符号出发,向下推导,推出句子。自上而下的分析法可以构造一颗语法树,把文法的开始符号当成根节点依次递归推导产生。自下而上,就是从输入串开始,逐步进行规约,直至归纳到文法的开始符号,换种说法,也就是从语法树的末端开始,逐步往上,直到根节点。自下而上的分析使用了“移近-规约法”,用一个寄存符号先进后出栈,把输入符号逐个移进栈里,当栈顶形成某个产生式的一个候选式时,再替换。
编译原理这门课研究的是编译器方面产生原理和技术问题,为大学生本科阶段的在计算机方面的学习提供了很好的基础,使学生对编译程序有了更深刻的理解。虽然编译原理从本质上来说只是一个算法问题而已,但当其需解决的问题十分复杂时,其算法也相对复杂。与数据结构这门课程相比,编译原理这门课程讲的是比较专注解决一种的算法。曾经,编译器的编写一直被认为是十分困难的事情,在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。
[1]陈火旺,刘春林,谭庆平,赵客佳,刘越.程序设计语言编译原理.北京:国防工业出版社,2004
[2]王峰,张浩军,阎娟,侯惠芳. 编译原理课程教学中的词法分析及其应用[J].计算机教育, 2013 (17) .
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!