需要哪些计算机科学学科的人员来学习编译器入门课程?[关闭]


10

我不是计算机科学专业的本科生,并且是专业的网络开发人员(java,python,AS3等)。我每学期在当地大学修一门课程。我上学期参加了人工智能(包括逻辑,上下文无关语法,CYK解析,入门级NLP,马尔可夫链,HMM等)。

我计划在即将到来的semster中学习编译器入门课程,内容涵盖以下课程:

词法分析,语法分析,语义分析,运行时环境,中间表示,代码生成,寄存器分配,指令选择和调度,局部和全局代码优化简介,数据流分析

我的问题是,在学习这门课程之前,我是否应该了解计算机科学专业?如果是,那么请列出这些课程将是很棒的。


1
取决于您的学校。我的不是那么难,所以前提是基本数据结构和基本算法-就是这样。不幸的是,他们使编译器成为可选的,而我很沮丧,没有接受它。
工作

Answers:


8

您可能应该对以下主题有一个简单的了解:

  • 离散数学(集合,关系,树,图,矩阵,数论)
  • 数据结构(从更实际的意义上讲,树,列表,堆栈,队列和字符串的工作方式)
  • 基本算法(核心概念,排序,搜索,Big-O表示法等)
  • 计算机体系结构(数字逻辑,位操作,微组件,高速缓存,内存,汇编编程)
  • 杂项(正则表达式,无上下文语言,有限状态/下推自动机,图灵机和可计算性,词法和解析工具)

可选,可能会有所帮助:

  • 操作系统设计(进程管理,内核设计,同步,调度,事件,锁,线程以及堆栈与堆)

4

好吧,我已经做了一些编写自己的编译器的工作,我想说,主要的前提条件是要对数据结构类中的知识有深入的了解。具体来说,如果您不了解递归,树和地图/哈希表,那么在尝试学习构建编译器时会很快迷失方向。


3

您将需要一些计算机体系结构的基本知识(寄存器,内存,专用寄存器等),并且之前已经看过一些汇编代码。如果您之前编写过一些汇编代码,那就更好了,因此您对机器语言的工作原理有一个很好的了解。

根据课程的级别,可能希望您对超标量处理等有所了解。


1
仅当我们假设所讨论的编译器正在生成机器代码而不是某种字节码时,这才是正确的。
梅森惠勒

3

如果这完全像我在白垩纪末期(大约1988年)收回的编译器类那样,那么唯一真正的先决条件就是数据结构(尤其是树和哈希表),某种汇编语言(用于生成的代码),可能一些计算机体系结构,以及任何可以教正则表达式,有限自动机,图灵机等东西的课程,尽管这些可能会作为编译器课程本身的一部分涵盖(FWIW,我的没有)。您还需要确保您了解递归。


2

您可能还需要参加有关正式模型和语言的课程。涵盖基本Chompsky层次结构的任何内容都可以:常规语言+上下文无关语言。这是因为了解解析的数学基础非常重要,这样解析器才能干净,高效且正确。我认为一个好的编译器类通常会同时覆盖正则表达式和LALR / LL(k)解析器以及它们背后的理论。


0

由于他们正在谈论代码优化,因此可能会在其中进行一些汇编语言编码。因此,至少对此有所了解可能会很好。这取决于特定课程的结构。否则,仅仅具备一套很强的编程技巧就足以对我认为的编译器类进行介绍。这将是非常有价值的课程。


0

取决于您的大学,但大多数都需要具备以下先决条件:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.