编程语言通识与 JavaScript 语言设计

第四课:编程语言通识与 JavaScript 语言设计

本节课主要讲包括编译原理在内的编程语言知识,本篇笔记还包含一些课程中没有讲到的拓展内容。

机器不能理解我们用高级语言编写的代码,所以要在程序执行前将高级语言“翻译”为机器语言。这是一个将源语言程序转化为目标语言程序的过程,它依靠翻译程序来完成。

翻译程序包括:

  • 编译器:将编译型语言(C++,Go)翻译为机器语言,执行之前转换好,步骤分为:词法分析->语法分析->语义检查->代码优化和字节码生成。
  • 解释器:将解释型语言(JavaScript、Python)翻译为机器语言,运行的时候才转换,步骤分为词法分析 -> 语法分析 -> 语法树,然后开始解释执行。

编程语言一般可以分为语法语义。语法(描述语言的方法)是说明编程语言中,哪些符号或文字的组合方式是正确的,是描述语言结构的一套规则;语义(描述语言的含义)则是对于编程的解释。但是语法和语义都是比较抽象的东西,所以我们需要借助一些工具来阐述它们。以语法来说,文法就是阐述它的一个工具。

乔姆斯基体系把文法划分为四种类型(从 0 型到 1 型),这四种类型层层增强,越到后面限制越大。

  • 0 型:无限制文法
  • 1 型:上下文相关文法
  • 2 型:上下文无关文法
  • 3 型:正则文法

产生式

  • 定义:是一种用形式化符号精准描述程序设计语言的语法的一种形式系统,文法是上下文无关文法
  • 产生式有很多种,BNF 是最常用的一种,所以下面只讲 BNF。

参考

  • 编译原理学习笔记-2:文法和语言