`

编译原理之词法分析、语法分析

 
阅读更多

词法分析(Lexical analysis或Scanning)和词法分析程序(Lexical analyzer或Scanner)
  词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。

语法分析(Syntax analysis或Parsing)和语法分析程序(Parser)
  语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语,如“程序”,“语句”,“表达式”等等.语法分析程序判断源程序在结构上是否正确.源程序的结构由上下文无关文法描述.

语义分析(Syntax analysis)
  语义分析是编译过程的一个逻辑阶段. 语义分析的任务是对结构上正确的源程序进行上下文有关性质的审查, 进行类型审查.例如一个C程序片断:
  int arr[2],b;
  b = arr * 10;
  源程序的结构是正确的.
  语义分析将审查类型并报告错误:不能在表达式中使用一个数组变量,赋值语句的右端和左端的类型不匹配.

Lex
  一个词法分析程序的自动生成工具。它输入描述构词规则的一系列正规式,然后构建有穷自动机和这个有穷自动机的一个驱动程序,进而生成一个词法分析程序.

Yacc
  一个语法分析程序的自动生成工具。它接受语言的文法,构造一个LALR(1)分析程序.因为它采用语法制导翻译的思想,还可以接受用C语言描述的语义动作,从而构造一个编译程序. Yacc 是 Yet another compiler compiler的缩写.

源语言(Source language)和源程序(Source program)
  被编译程序翻译的程序称为源程序,书写该程序的语言称为源语言.

目标语言(Object language or Target language)和目标程序(Object program or Target program)
  编译程序翻译源程序而得到的结果程序称为目标程序, 书写该程序的语言称为目标语言.

中间语言(中间表示)(Intermediate language(representation))
  在进行了语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间表示或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统复杂性介于源程序语言和机器语言之间,容易将它翻译成目标代码。另外,还可以在中间代码一级进行与机器无关的优化。

 

文法(Grammars)
  文法是用于描述语言的语法结构的形式规则。文法G定义为四元组(,,,)。其中为非终结符号(或语法实体,或变量)集;为终结符号集;为产生式(也称规则)的集合;产生式(规则)是形如或 a ::=b 的(a , b)有序对,其中(∪)且至少含有一个非终结符,而(∪)。,和是非空有穷集。称作识别符号或开始符号,它是一个非终结符,至少要在一条规则中作为左部出现。
  一个文法的例子: G=(={A,R},={0,1} ,={A?0R,A?01,R?A1},=A)
文法分类(A hierarchy of Grammars)
  著名语言学家Noam Chomsky定义了四类文法和四种形式语言类,文法的四种类型分别是0型、1型、2型和3型。几类文法的差别在于对产生式施加不同的限制,分别是:
  0型文法(短语结构文法)(phrase structure grammars):
  设G=(,,,),如果它的每个产生式是这样一种结构: (∪)  且至少含有一个非终结符,而(∪),则G是一个0型文法。
  1型文法(上下文有关文法)(context-sensitive grammars):
  设G=(,,,)为一文法,若中的每一个产生式均满足|,仅仅  除外,则文法G是1型或上下文有关的。
  2型文法(上下文无关文法)(context-free grammars):
  设G=(,,,),若P中的每一个产生式满足:是一非终结符,(∪)  则此文法称为2型的或上下文无关的。
  3型文法(正规文法)(regular grammars):
  设G=(,,,),若中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结,a是终结符,则G是3型文法或正规文法。
  0型文法产生的语言称为0型语言。
  1型文法产生的语言称为1型语言,也称作上下文有关语言。
  2型文法产生的语言称为2型语言,也称作上下文无关语言。
  3型文法产生的语言称为3型语言,也称作正规语言。

 

分享到:
评论

相关推荐

    编译原理词法分析,语法分析,语义分析(源代码和实验报告)

    这个过程通常包括三个主要阶段:词法分析、语法分析和语义分析。 词法分析,也称为扫描,是编译器的第一步。它将源代码分解成一系列的最小可识别单位,称为“词法单元”或“标记”。这些词法单元可以是关键字、...

    编译原理课程设计词法语法分析器

    在这个“编译原理课程设计词法语法分析器”项目中,我们将探讨编译器的核心组成部分——词法分析器和语法分析器的实现。 首先,词法分析器(也称为扫描器或词法生成器)是编译器的第一个阶段。它的任务是从源代码中...

    编译原理词法分析+语法分析课设

    在编程领域,编译原理是理解计算机语言处理过程的关键部分,它涉及词法分析和语法分析等核心概念。本课设旨在让学生深入理解和实践这些概念。 词法分析,也称为扫描或分词,是编译器设计的第一步。在这个阶段,输入...

    编译原理-词法分析语法分析(完整版)

    根据给定的信息,本文将详细解释“编译原理—词法分析语法分析”的核心概念、实现方式及其在程序设计中的应用。此代码片段提供了一个简单的词法分析器示例,用于展示如何识别输入源文件中的关键字、标识符、数字及...

    编译原理 实验 词法分析 语法分析

    在学习编译原理的过程中,理解词法分析和语法分析是基础,但同时也是非常重要的一步。这不仅帮助你理解程序是如何被计算机理解的,而且也为未来进行更复杂语言处理、编译器优化或者开发新的编程语言打下坚实的基础。...

    编译原理实验 词法、语法、语义分析

    实验可能涉及编写自定义的词法分析器、语法分析器和语义分析器,这将加深对编译原理的理解,同时提升实际编程技能。 总结,本实验项目“编译原理实验 词法、语法、语义分析”涵盖了编译器设计的核心内容,通过C语言...

    编译原理实验词法分析语法分析

    这份资料将帮助学习者深入理解词法分析器和语法分析器的设计与实现,通过实际操作加深对编译原理的理解。 总的来说,这个实验旨在让学习者掌握编译器的基本构造块,并运用到实际项目中。通过词法分析器的构建,学生...

    编译原理实验报告,词法分析,语法分析,语义分析。

    这份实验报告涵盖了编译器设计中的三个关键阶段:词法分析、语法分析和语义分析,这些都是将高级语言转化为机器语言不可或缺的部分。 1. **词法分析**(Lexical Analysis): 词法分析是编译过程的第一步,它将源...

    编译原理实验 词法分析 语法分析递归下降 预测分析 Python

    在编程领域,编译原理是理解计算机语言处理过程的关键部分,它涉及将源代码转换为目标...通过词法分析、语法分析、递归下降和预测分析的学习与实践,你不仅将掌握编译原理的核心概念,还将提升你的编程和问题解决能力。

    编译原理,词法分析与语法分析

    词法分析和语法分析是编译过程中的关键步骤,它们为程序的正确解析和执行奠定了基础。 词法分析(Lexical Analysis)是编译器的第一步,也称为扫描或词法分解。在这个阶段,源代码被分解成一系列有意义的单元,称为...

    编译原理 词法分析-语法分析-语义分析

    ### 编译原理:词法分析-语法分析-语义分析 #### 一、词法分析(Lexical Analysis) 词法分析是编译过程的第一步,它的主要任务是从源程序中识别出一个个有意义的单词符号(Token)。在这个过程中,输入的是源程序...

    编译原理大作业-词法分析器、语法分析器源码(java实现).zip

    编译原理大作业-词法分析器、语法分析器源码(java实现).zip编译原理大作业-词法分析器、语法分析器源码(java实现).zip编译原理大作业-词法分析器、语法分析器源码(java实现).zip编译原理大作业-词法分析器、...

    编译原理词法分析与语法分析的实验报告

    在编译原理中,词法分析和语法分析是构建编译器的重要步骤。这份实验报告主要探讨了这两个关键环节,并通过具体的C++编程实践进行了演示。 词法分析,也称为扫描,是编译器的第一个阶段,它将源代码分解成一系列有...

    编译原理(词法分析器+语法分析器) 编译原理(词法分析器+语法分析器)

    在编译原理中,词法分析和语法分析是紧密相连的。词法分析器提供了语义分析的基础,而语法分析器则负责构建程序的结构表示,两者共同确保源代码的正确性。如果在分析过程中发现错误,编译器会报告错误信息,如“语法...

    编译原理—词法分析和语法分析 实验报告

    **编译原理—词法分析和语法分析 实验报告** 在计算机科学中,编译原理是研究编程语言如何被转换为计算机可理解形式的关键领域。本实验报告将深入探讨两个核心概念:词法分析(Lexical Analysis)和语法分析...

    编译原理词法分析器、语法分析器python实现

    在编程领域,编译原理是理解计算机语言处理过程的关键部分,它涉及到词法分析、语法分析、语义分析以及代码生成等多个步骤。本项目聚焦于词法分析器和语法分析器的实现,采用Python作为开发语言,对于学习编译原理和...

    编译原理实验词法分析器 java语言版

    一旦测试通过,这个词法分析器就可以作为编译器的一部分,与其他组件(如语法分析器和语义分析器)协同工作,共同构建一个完整的编译系统。 总的来说,这个实验提供了一个学习编译原理和Java语言的实践平台。通过...

    编译原理实验词法语法分析

    在“编译原理实验词法语法分析”中,我们可能会涉及以下步骤: 1. 设计词法规则:定义源代码中的各个词法单元,如关键字、标识符、常量等,以及它们的匹配模式。 2. 设计语法规则:使用BNF(巴科斯范式)或其他表示...

    编译原理词法分析器语法分析器实验报告

    ### 编译原理词法分析器语法分析器实验报告知识点 #### 一、实验背景与目标 本实验基于编译技术课程的要求,旨在通过实际操作加深学生对编译原理的理解,特别是词法分析、语法分析、中间代码生成等方面的知识。...

    编译原理词法分析器源程序C语言实现

    编译原理包括词法分析、语法分析、语义分析、中间代码生成、目标代码生成等几个阶段。 2. 词法分析器 词法分析器是编译原理中的一部分,负责将源程序分割成一个个 token,例如关键字、标识符、数字、符号等。词法...

Global site tag (gtag.js) - Google Analytics