软考02程序设计语言

225 阅读4分钟

程序设计语言

编译程序和解释程序

低级语言: 汇编语言、机器语言
高级语言: 程序设计语言

解释器: 翻译源程序时不生成独立的目标程序,解释程序和源程序要参与到程序的运行过程中
编译器: 翻译时将源程序翻译成独立保存的目标程序,源程序和编译程序都不再参与目标程序的运行过程

程序中的数据都必须具有类型,其作用为:
便于为数据合理分配存储单元;
便于对参与表达式计算的数据对象进行检查;
便于规定数据对象的取值范围及能够进行的运算。

传值调用: 将实参的值传递给形参,实参可以是变量、常量和表达式。不可以实现形参和实参间双向传递数据的效果。

传引用(地址)调用: 将实参的地址传递给形参,实参必须有地址,实参不能是常量(值),表达式(因为常量、表达式没有地址)。可以实现形参和实参间双向传递数据的效果,即改变形参的值同时也改变了实参的值。

编译方式: 词法分析、语法分析、语义分析、中间代码生成、目标代码生成
解释方式: 词法分析、语法分析、语义分析

编译器和解释器都不可省略词法分析、语法分析、语义分析且顺序不可交换即词法分析、语法分析、语义分析是必须的。
编译器方式中中间代码生成和代码优化不是必要,可省略。即编译器方式可以在词法分析、语法分析、语义分析阶段后直接生成目标代码。 image.png 符号表: 不断收集、记录和使用源程序中一些相关符号的类型和特征等信息,并将其存入符号表中。记录源程序中各个字符的必要信息,以辅助语义的正确性检查和代码生成。

词法分析:

  • 输入:源程序
  • 输出:记号流
  • 词法分析阶段的主要作用是分析构成程序的字符及由字符按照构造规则构成的符号是否符合程序语言的规定。

语法分析:

  • 输入:记号流
  • 输出:语法树(分析树)
  • 语法分析阶段的主要作用是对各条语句的结构进行合法化分析,分析程序中的句子结构是否正确。

语义分析:

  • 输入:语法树(分析树)
  • 语义分析阶段的主要作用是进行类型分析和检查
  • 语法分析阶段能够发现程序中所有语法错误
  • 语义分析阶段不能发现程序中所有语义错误
  • 语义分析阶段可以发现静态语义错误,不能发现动态语义错误,动态语义错误运行时才能发现。

目标代码生成阶段:

  • 目标代码生成阶段的工作与具体的机器密切相关
  • 寄存器的分配工作处于目标代码生成阶段

中间代码生成:
常见的中间代码有:后缀式、三地址码、三元式、四元式和树(图)等形式。
中间代码与具体的机器无关(不依赖具体的机器),可以将不同的高级程序语言翻译成同一种中间代码。中间代码可以跨平台。
因为与具体的机器无关,使用中间代码有利于进行与机器无关的优化处理和提高编译程序的可移植性。

正规式:
应用场景:词法分析

image.png

有限自动机:
有限自动机是词法分析的一个工具,它能正确的识别正规集。
确定的有限自动机(DFA):对每个状态来说识别字符后转移的状态是唯一的;
不确定的有限自动机(NFA):对每个状态来说识别字符后转移的状态不是唯一的;

上下文无关文法