Compilation Principle


编译原理 总复习2023春季学期 QingDao University

一、名词解释

翻译器 能够完成一种语言到另一种语言的保语义变换的软件称为翻译器,这两种语言分别称为该翻译器的源语言和目标语言

句柄句型的句柄是该句型中和一个产生式右部匹配的子串,并且,把它归约成该产生式左部的非终结符代表了最右推导过程的逆过程的一步

L属性定义如果每个产生式 A->X~1~,X~2~…X~n~ 的每条语义规则计算的属性是 A 的综合 属性;或者计算的是 X~j~ 的继承属性,他仅依赖: 1:该产生式中 X~j~ 左边符号 X~1~,X~2~…X~j-1~ 的属性; 2: A 的继承属性;

良行为的程序一个程序的运行不可能引起不会被捕获错误的出现,那么称该程序是良行为的。

三地址代码三地址代码是一般形式为 x =y op z 的指令序列,其中 x,y和z是名字、常数或编译器产生的临时变量,op 代表算符;

二、简答题

6~8章

三、词法分析

子集构造、极小化状态、最简DFA,不能用死状态

四、语法分析

自上而下/自下而上 考一个

LL(1) or LR

消除左递归、左因子

follow集、first集

预测分析表——>不能作为终结符出现

五、语义分析与类型检查

六、开放(自然语言处理/编译原理)

请阐述编译原理和自然语言处理在词法分析方面的差异

编译原理和自然语言处理在词法分析方面有一些差异。

编译原理中的词法分析是编译过程的第一个阶段,目的是将输入的源代码分解为词法单元(tokens),并生成词法单元流。词法单元是源代码中的基本单元,如关键字、标识符、运算符和常量等。编译器使用词法分析器(lexer)根据语言的词法规则,将源代码转换为词法单元流,以便后续的语法分析和语义分析。

而自然语言处理(NLP)中的词法分析也被称为分词(tokenization),其目标是将自然语言文本分解为语言单位,如单词、短语或句子等。NLP的词法分析涉及处理各种自然语言特定的问题,如处理复杂的语法结构、词性标注、词形还原和命名实体识别等。

所以,编译原理的词法分析主要关注于编程语言的词法规则和生成词法单元流,而NLP的词法分析更关注于处理自然语言文本的特定问题,例如分词和语言单位的识别。尽管两者都涉及词法分析的概念,但在实践中的重点和方法会有所不同。

请阐述编译原理和自然语言处理在语法分析方面的差异

编译原理和自然语言处理在语法分析方面也存在一些差异。

在编译原理中,语法分析是编译过程的第二个阶段,其目标是根据语法规则验证和分析词法单元流的结构,生成抽象语法树(Abstract Syntax Tree,AST)。编译器使用语法分析器(parser)来解析词法单元流,并构建表示程序结构的抽象语法树。语法分析器根据编程语言的语法规则,检查输入的词法单元流是否符合语法要求,并转换为易于处理的中间表示形式。

而在自然语言处理中,语法分析也被称为句法分析(parsing),其目标是分析自然语言句子的结构和语法关系。语法分析器在自然语言处理中用于确定句子的短语结构、依存关系和语法角色等。这有助于理解句子的语法含义和上下文关系。

尽管编译原理和自然语言处理都涉及语法分析的概念,但在实践中的重点和方法存在差异。编译原理的语法分析主要关注于编程语言的形式化语法规则和语法树的生成,而自然语言处理的语法分析更关注于自然语言的句法结构、依存关系和语法角色的识别。因此,两者在语法分析的目标和处理方法上有所不同。

请阐述编译原理和自然语言处理在语义分析与类型检查方面的差异

编译原理和自然语言处理在语义分析与类型检查方面也存在一些差异。

在编译原理中,语义分析是编译过程的一个重要阶段,其目标是对源代码进行语义验证和语义处理。语义分析器会对抽象语法树进行遍历,检查变量的声明和使用是否合法,执行类型推导和类型检查,处理作用域和命名空间等。语义分析的目的是确保源代码在语义上是正确的,并生成中间代码或优化代码。

而在自然语言处理中,语义分析的目标是理解自然语言文本的语义含义和推理。语义分析器在NLP中用于解析句子的含义、上下文关联和语义角色标注等任务。这包括识别句子中的命名实体、消歧义歧义词义、执行逻辑推理和情感分析等。语义分析在NLP中有助于将自然语言转化为机器可理解的表示形式。

类型检查是编译原理中常见的任务之一,它涉及验证变量和表达式的类型是否匹配,并检测类型错误。编译器会检查类型的一致性、隐式类型转换和类型转换的合法性等。类型检查有助于捕获程序中的类型错误和提供类型安全性。

在自然语言处理中,类型检查的概念并不像编译原理中那样明确存在。自然语言处理更注重于对文本的语义理解和推理,而不像编译原理中那样明确涉及静态类型系统和类型检查。

因此,编译原理和自然语言处理在语义分析与类型检查方面存在差异,主要体现在目标和处理方法的不同。编译原理注重于程序语义的验证和类型检查,而自然语言处理注重于自然语言文本的语义解析和推理。