软件设计师(2) – 程序设计语言基础

1、编译和解释

编译型和解释型最大的不同,就是编译型会生成目标代码;

编译型编译的过程如下:

源程序 -> 词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 -> 目标代码生成 -> 目标程序

  • 词法分析:利用正规式、有限状态机,来检查是否存在非法字符,关键字或标识符拼写错误等;
  • 语法分析:检查语法结构是否正确,比如 if else 不匹配,缺分号等;
  • 语义分析:静态和动态语义分析,这里主要是指静态语义分析;静态语义分析,检查是否显式除0等;动态语义分析,运行时中出现的问题,检查死循环、隐式除0等;
  • 中间代码生成和代码优化这两步,可以没有;

2、文法

描述语言语法结构的规则成为文法;

一个形式文法是一个有序四元组G=(V, T, S, P),其中:

  • S:起始符,是语言的开始符号;
  • T:终结符,是语言的组成部分,是最终结果;
  • V:非终结符,不是语言组成部分,不是最终结果,可理解为占位符;
  • P:产生式,用终结符替代非终结符的规则;

文法的分类:

类型别称说明对应自动机
0型短语文法递归可枚举图灵机
1型上下文有关文法线性界限自动机
2型上下文无关文法非确定的下推自动机
3型正规文法有限自动机

3、有限自动机和正规式

有限自动机是一种识别装置的抽象概念,他能有效的识别正规集;

分为两类:确定的有限自动机(DFA)和不确定的有限自动机(NFA),两类都是一个五元组,任何一个NFA都可以转换到DFA;

正规式:描述程序语言单词的表达式;

4、数据类型和程序控制结构

常量和变量、全局量和局部量、数据类型;

数据类型

  • 基本类型:整型、字符型、布尔型;
  • 特殊类型:空类型;
  • 用户定义类型:枚举类型;
  • 构造类型:数组、结构、联合;
  • 指针类型:type*
  • 抽象数据类型:类类型(C++)

控制结构

  • 顺序结构
  • 选择结构
  • 循环结构

5、表达式

  • 前缀表达式:+ab
  • 中缀表达式:a+b
  • 后缀表达式:ab+,左->右->根

求(a-b)*(c+2)的后缀表达式 => 外层加括号 ((a-b)*(c+2)) => 符号移到括号外 => ((ab)-(c2)+)* => ab-c2+*

6、函数与传值和传址

传址就是传地址/引用;


总的来说,这一章里的文法、有限状态机、正规式没看明白,但看有限状态机的图做题还是可以的;

如果这篇文章对你有用,可以点击下面的按钮告诉我

0

发表回复