留学在线 2021-11-11 17:37:57
COMP7402-编译器和解释器
1.一般课程信息
UQ学生:请从Learn.UQ或mySI-net访问个人资料,以访问此个人资料中保存的所有课程参与者详细信息。
1.1课程详情
课程编号: COMP7402
课程名称:编译器和口译员
协调单位:信息技术与电气工程程学院
学期: 2024年第1学期
模式:内部
级别:研究生课程
地点:圣卢西亚
台数: 2
每周联系时间: 3L1T
前提条件: COMP7505
推荐的前提条件: CSSE7035或CSSE7201
不兼容: COMP3401或COMP4403或CS320或CS324
课程简介:编译器模块;编程语言规范;词法分析,解析-递归下降和表驱动;静态语义-符号表和类型检查;错误处理;代码生成和优化介绍;编译器生成器;口译员。
假设背景:
先决条件:COMP7505
编译器是一个实质性的程序,开发这种工具需要COMP7505中讲授的软件工程技术及其先决条件(特别是CSSE2002)。本课程中的作业涉及修改相当大的复杂软件,并且需要良好的编程技能。具备丰富的编程经验,尤其是Java经验。
需要了解数据结构的知识,才能理解用于语言处理器中内部结构(例如符号表和抽象语法树)的适当数据结构。从COMP7505先决条件中可以获取一些有关如何在计算机级别实现基本数据结构(如数组和记录)的知识。
推荐的:CSSE7035 或CSSE7201
必须具备机器语言和汇编语言编程的基本知识,才能理解编译器的代码生成阶段。
1.2课程简介
1950年代(高级)编程语言的发明是使软件开发更易于访问和更省时的最重要的进步之一-将机器或汇编语言的编写程序与Java进行比较。实施编程语言是1960年代和1970年代所面临的主要挑战,导致了现代编译器以及我们在本课程中学习的理论和实践的发展。使用编程语言而不是机器/汇编语言的一个显着优势是机器独立性。
为了确保编程语言在不同机器上的实现是一致的,需要一种与机器无关的语言定义。为此,我们首先定义语言的语法(即语言中的合法字符串是什么),然后定义其语义(或含义)。语言的语法是通过根据基本符号(例如关键字,标识符和运算符)编写的语法来定义的,这些符号被称为词汇标记,而标记则是根据字符串上的正则表达式定义的。并不是语法允许的所有字符串都是该语言中的有效程序,因为例如,不能在单个范围内对标识符进行多重定义,并且表达式的上下文类型必须正确。我们使用一组类型检查规则来定义格式正确的程序。
编程语言由编译器或解释器实现。它们本身都是(相当复杂的)程序。甲编译工具通过翻译一个高级程序编程语言(例如,Java程序简单地表示为一个文本文件(它本身表示为字符(其由位表示))的流)到一个机器级程序(以机器指令的序列表示(例如,x86机器指令(本身以位表示)))。[此外:在本课程中,您必须能够处理很多嵌套。]
编译器执行的任务可以分为以下几类。
识别输入程序并通过检测程序中的语法错误
词法分析:识别语言的基本符号(或词法标记),以及
解析:识别由这些基本符号组成的程序的结构。
从以下方面构造程序的抽象内部表示形式:
一个抽象语法树,并
一个符号表。
根据程序的静态语义检查程序的格式,例如,检查赋值语句是否类型正确。
生成代码,可以包括将程序的表示形式更改为更适合代码生成和代码优化的形式(源代码级别的计算机独立于目标机器代码级别的计算机)。然后可以在目标机器上执行生成的机器代码。由于课程中的时间限制,我们没有在代码优化上花费大量时间。
解释器是实现编程语言的一种更简单(通常效率较低)的方式。在早期阶段,它的作用与编译器相同,但是没有代码生成阶段。相反,它直接解释程序的内部表示。解释器相对于编译器的主要优点是,它们不依赖于目标计算机,因此比编译器更具移植性。解释器用于简单的语言,例如操作系统命令外壳,在这些语言中,生成机器代码的开销超过了解释程序的较慢执行时间,或者在非常高级的语言(例如,功能和逻辑编程语言)中使用解释器它们的功能如此强大,以至于解释比编译的执行时间成本并不是那么重要。
编译器的语言识别阶段对于涉及某种形式的语言的计算机的许多应用程序是通用的。例如,网络浏览器可以识别以超文本标记语言(HTML)编写的文档,并通过在屏幕上生成文档显示来对其进行解释。
COMP7402编译器和解释器研究生早期的编译器是手工制作的程序,旨在为特定的计算机实现特定的语言。但是,在1960年代,人们认识到编写编译器的许多方面都不依赖于要编译的特定编程语言。特别是,识别程序并创建程序抽象表示的早期阶段主要取决于语言的语法。结果是创建了编译器生成器(实际上是词法分析器和解析器生成器)。解析器生成器是另一个程序,它接受编程语言的描述(以该语言的语法形式)并生成一个程序,该程序是该语言的解析器。现代编译器生成器通常被实现为协作工具套件,可从一系列符号生成编译器组件,每种符号指定一种语言的不同方面(及其实现)。这些活动不仅包括词法分析和解析,还包括错误检查和代码生成。
2023-06-14
2023-03-07
2023-11-21
2020-02-20
2021-11-08
2023-05-18
2021-07-21
2021-06-29
2023-06-12
2023-07-01
2021-12-14
2023-06-06
2022-11-15
2020-02-20
2020-12-31
2023-06-26
2023-06-05
2022-07-05
2021-11-23
2023-09-18