解释程序方式的过程

C语言 码拜 9年前 (2016-04-26) 1850次浏览
有一道题目,问解释程序和编译程序的知识
其中答案A的描述是错误的(原因是正确描述只有C),
答案A为
“在解释方式下,对源程序不进行词法分析和语法分析,直接进行语义分析”
答案解释里面是这么解释的
在词法分析,语义分析,语法分析方面,编译方式和解释方式都一样
然后本人找了一下资料,发现没有说解释方式需要此词法语义语法分析的,只有一个语法分析(如下图)
所以是不是解释的方式并不进行词法语义分析,直接进行语法分析?
谢谢各位了
解释程序方式的过程
解释程序方式的过程
解决方案

10

语法分析,不可能没有词法分析
但是语法分析和词法分析可以结合到一起,不加区分(假如词法很简单的话)

10

语义分析会有的
代码生成,可能会有,也可能不会有
不生成代码的,(虚拟机)直接解释执行了,
大致就是调用内置函数(过程)执行,
简单的也可以直接处理,例如加减乘除这种数学计算。
生成代码的。虚拟机解释 生成的中间代码执行。
简单的语义分析 和解释执行可能就一步到位了
例如VB6 就可以将 程序生成 p-code 然后解释执行
但不是完全都是生成 p-code 执行的

10

语义分析 是词法,语法分析之后做的事情。
解释器,假如不做代码生成的话。
语义分析以后, 就开始执行 了。
象 a + b  这是个表达式,结果是二者之和  这是语义分析部分要做的
假如是生成 p 代码 a,b + 这两个操作数,一个运算符,都要用 p 代码表示出来
那就成了代码生成了
假如不做代码生成,那么就会调用内部函数,处理这个表达式求出结果来
语义分析,这一步得出 这个表达式是合法的,这个+ 号怎么样处理 a,b怎么样处理
复杂表达式怎么样处理
这就是语义分析了
假如是词法分析 就可以分解出 a,+ ,b 三个符号,判断他们能否是合法的标识符(以及符号)
语法分析 判断出表达式 a+b 能否合法的表达式 运算符是+,a ,b 是操作数
语义分析 a+b 这个表达式各个元素,对应的p代码的那些元素。
或对应内部那些 函数,过程 怎么样处理操作数
对于不带 代码生成的,下一步就是执行
对于带代码生成,下一步生成代码(p代码),执行代码(p代码)

10

解释器一次处理,大约是这个样子:
读取程序代码–> 出错处理
|
v
词法分析–> 出错处理
|
v
语法分析  –> 出错处理
|
v
语义分析  –>出错处理
|
V
(代码生成)–>出错处理
|
V
执行–>出错处理
|
V
得出结果

10

解释程序也要翻译成中间码

5

引用:

解释程序也要翻译成中间码

可能需要,也可能不要
看怎么样实现这个解释器
加括号,表示可能不会有这一步

10

其实,java 是编译后,解释执行的
.net 上的语言(VB,C#,C++CLI)有两种执行方式
一种是编译成 中间语言,解释执行
一种是编译成中间语言,执行时编译为本地代码,然后执行
此前的语言
Basic 早期是解释执行的,微软后来QBasic,Qick Basic 变为也给他编译执行了,
他有两种执行方式,IDE内调试时,可以解释执行,
也可以脱离环境 编译为 exe 执行
Pacal 是编译执行的,但是也有人研制出解释执行的pascal
怎么执行,其实是和编译系统,或解释器的实现相关的。
和语言的关系,只是方便不方便处理成 编译,或解释执行而已。
方便的难度小,否则难度大,
但是都是可以,编译或解释执行的
很多系统,是编译和解释都有的
例如,MS 的VB6 虽然是编译执行为主,
但是 可能会编译成p-code 解释执行一部分代码。
MS VB 不是完全的编译执行的。

5

参考解释和编译执行C的开源项目。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明解释程序方式的过程
喜欢 (0)
[1034331897@qq.com]
分享 (0)