一、概念
- 解释器(interpreter): 是一种计算机程序,它将每个高级程序语句转换成机器代码。
- 编译器(compiler): 把高级语言编写的程序转换成机器码,将人可读的代码转换成计算机可读的代码(0和1)。
二、两者的区别
- 注意:Java既是编译的又是解释的,Java代码本身被编译成目标代码。在运行时,JVM将目标代码解释为目标计算机的机器代码。
三、总结
编译器和解释器的目的是做相同的工作,但在操作过程上不同,编译器以聚合的方式获取源代码,而解释器获取源代码的组成部分,即一条一条的语句。
名词解释:
与编译原理有关…
- 词法分析:lexical analysis,输入源程序串,输出单词符号,即将字符序列转换为 token 序列的过程。进行词法分析的程序 or 函数叫作 词法分析器(lexical analyzer,简称lexer),也叫扫描器 (scanner)。词法分析器一般以函数的形式存在,供 语法分析器 调用。
- 语法分析:根据高级语言的语法规则对程序的语法结构进行分析。分析上一步得到的单词符号串是否符合语言的语法规则,分析并识别各种语法成分,同时进行语法检查和错误处理,为语义分析和代码生成做准备。
- 语义分析:基于语义规则,对语法树进行语义分析。包括变量是否定义,类型是否正确等。 主要功能包括建立符号表,进行静态语义检查,发现语义错误。
语义分析的类型:静态语义和动态语义
- 静态语义:在编译阶段可以检查的语义。e.g.标识符未声明。
- 动态语义:目标程序运行时(run-time)才能检查的语义。e.g.除零、溢出错误。