编程语言通识与 JavaScript 语言设计
第四课:编程语言通识与 JavaScript 语言设计
本节课主要讲包括编译原理在内的编程语言知识,本篇笔记还包含一些课程中没有讲到的拓展内容。
机器不能理解我们用高级语言编写的代码,所以要在程序执行前将高级语言“翻译”为机器语言。这是一个将源语言程序转化为目标语言程序的过程,它依靠翻译程序来完成。
翻译程序包括:
- 编译器:将编译型语言(C++,Go)翻译为机器语言,执行之前转换好,步骤分为:词法分析->语法分析->语义检查->代码优化和字节码生成。
- 解释器:将解释型语言(JavaScript、Python)翻译为机器语言,运行的时候才转换,步骤分为词法分析 -> 语法分析 -> 语法树,然后开始解释执行。
编程语言一般可以分为语法
及语义
。语法(描述语言的方法)是说明编程语言中,哪些符号或文字的组合方式是正确的,是描述语言结构的一套规则;语义(描述语言的含义)则是对于编程的解释。但是语法和语义都是比较抽象的东西,所以我们需要借助一些工具来阐述它们。以语法来说,文法
就是阐述它的一个工具。
乔姆斯基体系把文法
划分为四种类型(从 0 型到 1 型),这四种类型层层增强,越到后面限制越大。
- 0 型:无限制文法
- 1 型:上下文相关文法
- 2 型:上下文无关文法
- 3 型:正则文法
产生式
- 定义:是一种用形式化符号精准描述程序设计语言的语法的一种形式系统,文法是
上下文无关文法
。 - 产生式有很多种,BNF 是最常用的一种,所以下面只讲 BNF。
参考
- 编译原理学习笔记-2:文法和语言