01——概述

什么是编译程序

定义:

简单地,一个编译程序就是一个语言翻译程序,它把一种语言(称作源语言)书写的程序翻译成另一种语言(称作目标语言)书写的等价程序

为什么学习编译原理

计算机领域:程序设计语言、软件技术、思维方法

应用领域:

  • 信息检索:文本描述;
  • 人工智能:句法分析、自然语言理解;
  • 网络语言:XML, SGML;
  • 网络通信:通信协议描述与解释;

编译过程概述

 词法分析

词法分析或扫描) ---构成源程序的字符流从左到右读取并分组为标记,标记是具有集体含义的字符序列。

语法分析

层次分析,依据源程序的语法规则把源程序的单词序列组成语法短语(表示成语法树)

规则:

  • <赋值语句>::=<标识符>“:=”<表达式>      
  • <表达式>::=<表达式>“+”<表达式>      
  • <表达式>::=<表达式>“*”<表达式>      
  • <表达式>::=“(”<表达式>“)”      
  • <表达式>::=<标识符>      
  • <表达式>::=<整数>      
  • <表达式>::=<实数>

语义分析

审查源程序有无语义错误,为代码生成阶段收集类型信息。进一步分析解析后的程序,以确定它是否符合源语言的上下文约束、范围规则、类型规则

  • 上下文相关性
  • 类型匹配
  • 类型转换

中间代码生成

这是创建源程序的中间表示形式的地方。我们希望这种表示易于生成,并且易于转换为目标程序。表示形式可以有多种形式,但常见的形式称为三地址代码或四元组代码。

设计原则:

  • 容易生成
  • 容易翻译成目标代码

代码优化

中间代码优化:优化器接受中间表示中的输入,并输出仍处于中间表示中的版本。在此阶段,编译器尝试通过应用各种技术来生成最小、最快和最有效的运行结果。

目标代码优化

符号表

记录源程序中使用的名字,收集每个名字的各种属性信息,如:类型、作用域、分配存储信息

出错处理

检查错误、报告出错信息、排错、恢复编译工作

编译程序结构

编译程序中的主要数据结构

  • 记号表 token(单词的内部表示)
  • 语法树 syntax tree
  • 符号表 symbol table
  • 常数表 literal table
  • 中间代码 intermediate code
  • 临时文件 temporary file

几个重要概论

趟 (pass, 遍):对源程序(包括源程序中间形式)从头到尾扫描一次,并做有关的加工处理,生成新的源程序中间形式或目标程序,通常称之为一遍

单趟扫描

多趟扫描

编译的前端 (front end):通常将与源程序有关的编译部分称为前端。词法分析、语法分析、语义分析、中间代码生成、代码优化(与源语言有关)

编译的后端 (back end):与目标机有关的部分称为后端。目标程序生成(以及与目标机有关的优化)(与目标机有关)

编译程序生成

交叉编译:由于目标机指令系统与宿主机的指令系统不同,编译时将应用程序的源程序在宿主机上生成目标机代码,称为交叉编译

自展(自编译)

移植

自动生成程序

### 回答1: Spark是一个开源的大数据处理框架,它可以在分布式计算集群上进行高效的数据处理和分析。Spark的特点是速度快、易用性高、支持多种编程语言和数据源。Spark的核心是基于内存的计算模型,可以在内存中快速地处理大规模数据。Spark支持多种数据处理方式,包括批处理、流处理、机器学习和图计算等。Spark的生态系统非常丰富,包括Spark SQL、Spark Streaming、MLlib、GraphX等组件,可以满足不同场景下的数据处理需求。 ### 回答2: Spark是一个分布式计算框架,其出现是为了解决Hadoop MapReduce计算模型中的许多性能问题。与MapReduce相比,Spark的计算速度更快,因为它可以在内存中缓存数据并使用更高效的调度算法。此外,Spark还支持多种语言,包括Scala、Java、Python和R等。 Spark有多个模块,包括Spark Core、Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等。Spark Core是Spark的基本组件,在其中实现了RDD这种抽象数据结构,它可以将数据分布在多台计算机上,从而实现分布式计算。Spark SQL提供了用于处理结构化数据的API和查询语言,它允许将Spark与现有的SQL工具和数据源一起使用。Spark Streaming可以在实时流处理中使用Spark来处理数据,并提供了与常见的消息队列和流处理系统的无缝集成。Spark MLlib提供了许多机器学习算法,可以在分布式环境中进行大规模的机器学习。Spark GraphX是用于图计算的组件,可以用于处理较大的网络图和社交网络图等。 Spark可以在各种场景下使用,例如大型金融数据分析、人工智能、机器学习和图计算等领域。与Hadoop相比,Spark具有更快的速度、更轻量的资源消耗和更广泛的开源社区支持,已经成为许多大规模数据分析和处理项目的首选技术之一。 总之,Spark是一个功能强大的分布式计算框架,具有快速、灵活和多语言支持等特点,并且在实际应用中表现出色,是大数据学习中不可或缺的重要技术之一。 ### 回答3: Spark是一个快速、通用、分布式计算引擎,可以在大规模数据集上进行高效的数据处理。Spark是基于内存的计算引擎,可以将数据存储在内存中,从而提高计算速度。Spark支持多种编程语言,包括Java、Scala、Python和R,因此很容易上手,并且可以适应各种应用场景。 Spark的核心组件包括Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX等,在处理不同类型的数据上都具有很强的适应性。Spark SQL可以处理结构化数据,Spark Streaming可以实现实时数据处理,Spark MLlib可以进行机器学习任务,Spark GraphX可以处理图形数据。此外,Spark还提供了一个交互式的shell,方便用户测试和调试代码。 在分布式环境下,Spark使用集群模式进行计算。集群中的每个节点都有自己的内存和CPU资源,Spark通过将任务分发到不同的节点上进行并行计算以提高计算速度。Spark还提供了一些高级特性,如广播变量、累加器和检查点等,以提高计算性能和可靠性。 在大数据处理方面,Spark有着广泛的应用场景。例如,Spark可以用于数据清洗和转换、数据仓库构建、实时数据处理和机器学习等任务。Spark还支持多种数据源,包括关系型数据库、Hadoop HDFS、NoSQL数据库和云存储等,这些数据源都可以与Spark集成,以进行数据分析和处理。 总之,Spark是一个非常重要和流行的大数据处理工具,它有强大的功能和广泛的应用场景。对于想要学习大数据处理的人来说,掌握Spark是必不可少的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值