相关疑难解决方法(0)

编译语言与口译语言

我正在努力更好地理解这种差异.我在网上找到了很多解释,但它们倾向于抽象的差异而不是实际的含义.

我的大部分编程经验都是CPython(动态,解释)和Java(静态,编译).但是,据我所知,还有其他类型的解释和编译语言.除了可执行文件可以从编译语言编写的程序中分发之外,每种类型都有任何优点/缺点吗?通常,我听到有人认为解释性语言可以交互使用,但我相信编译语言也可以有交互式实现,对吗?

python java compiler-construction interpreter programming-languages

263
推荐指数
9
解决办法
20万
查看次数

解释器/编译器如何工作

解释器/编译器如何工作?解释器和编译器之间有什么区别.

compiler-construction interpreter

71
推荐指数
5
解决办法
7万
查看次数

实现编译器和解释器有什么区别?

我最近阅读了整本龙书(只是为了好玩,我真的不打算实现一个真正的编译器),而且我的脑子里还悬着这个大问题.

实现编译器和解释器有什么不同?

对我来说,编译器由以下部分组成:

  • 词法分析器
  • 解析器(构建语法树)
  • 生成中间代码(如3地址代码)
  • 如果你愿意,可以做所有这些疯狂的事情:-)
  • 从3地址代码生成"汇编"或"本机代码".

现在,显然,解释器也具有与编译器相同的词法分析器和解析器.
但那之后呢?

  • 它是否"读取"语法树并直接执行它?(有点像指针指向树中的当前节点,执行是一个大树遍历加上调用堆栈的内存管理)(如果是这样,它是如何做到的?我希望执行比检查它是什么类型的节点的巨大switch语句更好

  • 它会生成3个地址代码并解释它吗?(如果是这样,它是如何做到的?再次,我正在寻找比一英里长的开关声明更优雅的东西)

  • 它是否生成真正的本机代码,将其加载到内存中并使其运行?(此时我猜它不再是解释器了,但更像是JIT编译器)

此外,"虚拟机"的概念在哪一点上切入?你在一种语言中使用虚拟机是什么?(要清楚我的无知程度,对我来说虚拟机是VMWare,我不知道VM的概念如何应用于编程语言/执行程序).

如你所见,我的问题非常广泛.我主要不仅要寻找使用哪种方法,而且主要是先了解大概念,然后详细了解它的工作原理.我想要丑陋的原始细节.显然,这更像是对要阅读的东西的追求,而不是期望你在这里回答所有这些细节.

谢谢!
丹尼尔


编辑:感谢您的答案到目前为止.我意识到我的头衔有误导性.我理解编译器和解释器之间的"功能"差异.
我正在寻找的是你如何实现解释器与编译器的区别.
我现在明白如何实现编译器,问题是解释器与此有何不同.

例如:VB6显然既是编译器又是解释器.我现在了解编译器部分.但是,我无法理解,当在IDE内部运行时,它可以让我在任意点停止程序,更改代码,并使用新代码继续执行.这只是一个很小的例子,它不是我正在寻找的答案.正如我在下面解释的那样,我想要理解的是在我有一个解析树之后会发生什么.编译器将以"目标"语言从中生成新代码.口译员做什么?

谢谢您的帮助!

compiler-construction interpreter

21
推荐指数
3
解决办法
5546
查看次数

没有"编译语言"或"解释语言"这样的东西

"没有"编译语言"或"解释语言"这样的东西.语言实现者是选择编写编译器,解释器还是介于两者之间的任何东西都是实现细节而与语言无关.

以上陈述是真的吗?

compiler-construction interpreter programming-languages

15
推荐指数
1
解决办法
819
查看次数