编译原理概念总结.doc
上传人:qw****27 上传时间:2024-09-12 格式:DOC 页数:7 大小:207KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

编译原理概念总结.doc

编译原理概念总结.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

引论•为什么要用编译器•与编译器相关的程序•翻译步骤•编译器中的主要数据结构1、语言处理器1、简单的说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成一个等价的、用另一种语言(目标语言)编写的程序。2、编译器的重要任务之一就是报告它在翻译过程中发现的源程序中的错误。3、使用编译器是为了提高编程的速度和准确度。4、与编译器相关的程序:解释程序(interpreter)、汇编程序(assembler)、连接程序(linker)、装入程序(loader)、预处理器(preprocessor)、编辑器(editor)、调试程序(debugger)、描述器(profiler)、项目管理程序(projectmanager)。ObjectProgram5、解释器是另一种常见的语言处理器。它并不通过翻译的方法生成目标程序。从用户的角度来看,解释器直接利用用户提供的输入执行源程序中指定的操作。TranslatorLoader,LinkerandRun-timeSystemOutputSourceProgram6、一个源程序可能被分割成多个模块,并存放于独立的文件中。把源程序聚合在一起的任务有时会由一个被称为预处理器(preprocessor)的程序独立完成。预处理器还负责把那些称为宏的缩写形式转换为源语言的语句。7、连接器(linker)能够解决外部内存地址的问题。8、加载器(loader)把所有的可执行目标文件放到内存中执行。2、一个编译器的结构LexicalAnalysisSyntaxAnalysisSemanticAnalysisControlflow/DataflowOptimizationCodeGenerationSourceProgramAssemblyCodeScannerParserHigh-levelIRtolow-levelIRconversionBuildhigh-levelIRContextSymbolTableCFGMachineindependentasmtomachinedependentFrontendBackend1、将编译器看成黑盒,则源程序映射为在语义上等价的目标程序,而这个映射由两部分组成:分析部分和综合部分。2、分析部分把源程序分解成多个组成要素,并在这些要素之上加上语法结构。3、综合部分根据中间表示和符号表中的信息来构造用户期待的目标程序。4、编译器的第一个步骤:词法分析(lexical)或扫描(scanning)。词法分析器读入组成源程序的字符流,并且将它们组成有意义的词素(lexeme)的序列。词法分析器产生词法单元(token)。5、分隔词素的空格会被词法分析器忽略掉。6、编译器的第二个步骤:语法分析(syntax)或解析(parsing)。语法分析器使用由词法分析器生成的各个词法单元的第一个分量来创建树形的中间表示。7、语义分析(staticsemanticanalysis):语义分析器使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。它同时也收集类型信息,并把这些信息存放在语法树或符号表中,以便在随后的中间代码生成过程中使用。语义分析的一个重要部分是类型检查(typechecking)。编译器检查每个运算符是否具有匹配的运算分量。8、总的说,编译器的翻译步骤是:扫描程序----语法分析程序----语义分析程序----源代码优化程序----代码生成器----目标代码优化程序。3、编译器结构中的主要数据结构1、记号(token)2、语法树(syntaxtree)3、符号表(symboltable)4、常数表(literaltable)5、中间代码(intermediatecode)6、临时文件(temporaryfile)4、将编译器分成了只依赖于源语言(前端(frontend))的操作和只依赖于目标语言(后端(backend))的操作两部分。词法分析•扫描处理•正则表达式•有穷自动机•从正则表达式到DFA•利用Lex自动生成扫描程序Tokens记号标记:identifiers、keywords、integers、floating-point、symbols、strings、comments使用正则表达式去描述程序语言tokens一个正则表达式是归纳确定一个正则表达式R描述一组字符串集合L(R)L(R)=thelanguagedefinedbyR所有的token都能用正则表达式表示正则表达式:基本正则表达式:他们是字母比哦啊中的单个字