编译器实现

Posted x-police

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编译器实现相关的知识,希望对你有一定的参考价值。

1.语义分析

语义分析可以分为两类。

第1类是程序的分析,要求根据编程语言的规则建立其正确性,并保证其正确执行。对于不同的语言来说,语言定义所要求的这一类分析的总量变化很大。在LISP和Smalltalk这类动态制导的语言中,可能完全没有静态语义分析;而在A d a这类语言中就有很强的需求,程序必须提交执行。其他的语言介于这两种极端情况之间(例如 Pascal 语言,不像A d a和C对静态语义分析的要求那样严格,也不像 LISP 那样完全没有要求)。

语义分析的第2类是由编译程序执行的分析,用以提高翻译程序执行的效率。这一类分析通常包括对“最优化”或代码改进技术的讨论。

这两类分析也不是相互排斥的,因为与没有正确性要求的语言相比,如静态类型检查这样的正确性要求能使编译程序产生更加有效的代码。另外,值得注意的是,这里讨论的正确性要求永远不能建立程序的完全正确性,正确性仅仅是部分的。但这样的要求仍然是有用的,可以给编程人员提供一些信息,提高程序的安全性和有效性。

 

1.1 属性和属性文法

 属性( attribute)是编程语言结构的任意特性。属性在其包含的信息和复杂性等方面变化很大,特别是当它们能确定时翻译/执行过程的时间。

属性的典型例子有:

  • 变量的数据类型。
  • 表达式的值。
  • 存储器中变量的位置。
  • 程序的目标代码。
  • 数的有效位数。

 

以上是关于编译器实现的主要内容,如果未能解决你的问题,请参考以下文章

实现一个简易编译器

编译器实现

实现一个简单的编译器

模板实现和编译器

“编译器有助于实现 C 标准”是啥意思?

如何实现一个简易编译器