`
mixer_a
  • 浏览: 370793 次
社区版块
存档分类
最新评论

编译原理之文法一

阅读更多

一、先简单介绍一下形式语言基本知识

 

1、字母表:符号的非空有限集合称为字母表

 

2、符号串:由某一字母表中的符号组成的有限符号序列称为该字母表的符号串

 

二、非形式化的语言:

 

①语言LM合并LUM={s|sL sM}

 

②语言LM连接LM={st|sLtM}

③语言LKleene闭包L*=     

④语言L正闭包L+=     


解释:


前面①,②都很好理解,关于③和④,这里说明一下。


③:

集合 L 的第 i 次幂是集合 L 同自身的 i 次串接的简写。即,L 可以被理解成由 L 中的符号形成的所有长度为 i 的字符串的集合。


 L =  {"ab", "c"}

 L0 =  {ε}

 L1 =  { "c"}(由L中符号形成的所有长度为1的字符串的集合)

 L2 ={"ab"} ,{"cc"}(由L中符号形成的所有长度为2的字符串的集合)等等


 

由此,Kleene 星号应用于字符串集合的例子:

 L* =  {"ab", "c"}* =      

 

={ε}∪{ "c"}∪{"ab"} ∪{"cc"}∪{"abc"} ∪{"cab"}∪{"ccc"}∪{"abcc"}∪{"abab"}∪{"cabc"}∪{ "ccab"}∪{"ababc"}∪{"abcab"}∪{"cabab"}∪{"ababab"}∪……}


={ε, "c", "ab","cc",  "abc","cab",  "ccc","abab",  "cabc", "ccab", "abcc",  "ababc", "abcab","cabab", "ababab",……}


同理,Kleene 星号应用于字符集合的例子:

{'a', 'b', 'c'}* = {ε, "a", "b", "c", "aa", "ab", "ac", "ba", "bb", "bc", ...}

 

④:

和③类似,只不过④中没有 L0 =  {ε}


更多参见:http://zh.wikipedia.org/wiki/Kleene%E9%97%AD%E5%8C%85


三、文法(Grammar)

 

G={VTVNSP}

 

VT是一个非空有限的符号集合,它的每个元素称为终结符号Terminal

 

VN是一个非空有限的符号集合,它的每个元素称为非终结符号(Non-Terminal

 

SVN,称为文法G开始符号

 

P是一个非空有限集合,它的元素称为产生式

 

VTVN=∅

 

产生式,其形式为αβα称为产生式的左部,β称为产生式的右部,符号“→”表示“定义为”,并且αβ∈(VTVN)*αε,即αβ是由终结符和非终结符组成的符号串。

开始符S必须至少在某一产生式的左部出现一次。

另外可以对形式αβαγ的产生式缩写为αβ|γ,以方便书写。

 

解释:

(VTVN) *:也就是VTVNKleene闭包

αεα不等于空符号串

 

用小写字母代表终结符,如:abc……,不能被拆分

用大写字母代表非终结符,如:ASBX……,可以被拆分

分享到:
评论

相关推荐

    编译原理 压缩文法等价变换

    此程序采用了加标记法 输入一个程序 得到的是压缩后的结果

    编译原理实验二:压缩文法的等价变换

    在编译原理中,压缩文法是一种特殊类型的上下文无关文法,用于描述语言的结构,使得表达形式更为紧凑,解析效率更高。这次实验“压缩文法的等价变换”旨在让学生深入理解编译器设计中的语法分析阶段,特别是如何通过...

    编译原理 正规文法 代码

    正规文法则是编译原理中的一种形式语法,用于描述编程语言的结构。在这个压缩包中,包含了一个名为“正规文法”的文件夹,里面存放的是C++源代码,这些源代码很可能是一个编译器或解析器的一部分,用于处理正规文法...

    编译原理实验 文法的输入输出

    本程序解决了编译原理中文法的输入输出问题,识别符号是固定的,其他文法顺序自定。

    编译原理LL1文法实现

    在编程领域,编译原理是理解计算机语言处理过程的关键部分,特别是对于开发编译器或解释器的工程师来说。本文将深入探讨LL1文法及其实现。LL1文法是一种自左向右(Left-to-Right)扫描输入,并且只需要一个看前缀...

    编译原理课程设计LL1文法

    在这个"编译原理课程设计LL1文法"项目中,我们主要关注的是LL1分析法,这是一种用于解析程序语法的方法。 LL1分析法全称为“Left-to-right scanning, Leftmost derivation, First set, and One Lookahead”。这种...

    编译原理实验(文法的输入输出)

    根据给定的信息,本文将对“编译原理实验(文法的输入输出)”这一主题进行深入探讨。本文首先解析了题目中的核心概念——正则文法,并详细介绍了如何通过编程实现对该文法的分析与处理,特别是如何提取文法中的终结...

    编译原理2文法和形式语言

    编译原理2文法和形式语言 编译原理2文法和形式语言 编译原理2文法和形式语言 编译原理2文法和形式语言 编译原理2文法和形式语言

    编译原理:C语言文法

    《编译原理:C语言文法》 C语言文法是理解编程语言底层运作机制的关键,对于学习编译原理有着至关重要的作用。本文将详细解析C语言的语法结构,包括程序的基本构造、声明和定义、函数以及表达式等多个方面。 首先...

    编译原理之LL1文法 (C++)

    本资源是针对大学编译原理课程的一个实验项目,使用C++语言实现,对于学习和理解LL1文法有极大的帮助。 首先,让我们深入了解一下LL1文法的概念。"LL1"这个术语由三个部分组成:L代表自左至右(Left-to-Right),L...

    编译原理(文法分析)

    在IT领域的编译原理中,文法分析是一个核心概念,它涉及到如何解析源代码,将其转换为计算机可以理解的形式。文法分析是编译器设计中的一个重要环节,它基于形式语言理论,通过文法规则来识别和分析源代码的结构。 ...

    编译原理课程设计 LL1文法

    编译原理课程设计,LL1文法的实现。采用MFC。输入文法,分别求出每一个非终结符FIRST 集FOLLOW集和SELECT集,画出预测分析表,判定读入的文法是否是LL(1)文法,给定的任意符号串判定是否是文法中的句子,将分析过程...

    编译原理LR(1)文法.rar

    LR(1)文法是编译原理中的一个重要概念,它是一种自底向上的解析方法,用于分析编程语言的语法结构。LR(1)是“Left-to-Right scanning, Rightmost derivation with 1 lookahead symbol”的缩写,即从左到右扫描输入串...

    编译原理课程设计正规式转化为右线性文法输出

    编译原理课程设计正规式转化为右线性文法输出 本课程设计的主要目标是实现正规式到右线性文法的转换,输出正确的右线性文法。为了达到这个目标,我们需要设计一个扫描器,即词法分析器,来识别源程序中的单词,并将...

    编译原理课程设计 LL(1)文法判定

    《编译原理课程设计:LL(1)文法判定》 在计算机科学领域,编译原理是一门核心的课程,它研究如何将高级语言转换为机器可执行的指令。其中,LL(1)文法是一种重要的语法分析方法,广泛应用于编译器的设计。本次课程...

    编译原理实验四LL(1)文法【C语言实现】

    编译原理实验四 LL(1)文法 C 语言实现 本实验报告的主要目的是通过实现 LL(1)分析法来加深对预测分析的理解。 LL(1)分析法是一种常用的语法分析方法,它可以对输入的符号串进行自上而下的分析。 实验报告的...

    编译原理LL1文法MFC

    在"编译原理开发设计,采用LL1文法,界面MFC设计"的项目中,我们可以想象这样一个场景:开发者使用LL1文法来解析特定的编程语言,构建一个前端分析器,这个分析器可以有效地识别和处理源代码的结构。同时,利用MFC库...

    编译原理的文法和语言概述

    在编译原理中,文法和语言的概念是至关重要的,它们构成了高级编程语言的基础描述方式。形式语言理论为编译提供了坚实的理论支持,通过严谨的符号体系——文法,能够精确描述并理解高级语言。 首先,我们要理解文法...

    编译原理实验文法分析,文法压缩,预测分析

    在编译原理中,文法分析是至关重要的一个环节,它是编译器设计的核心部分,主要目的是将源程序转换成中间表示,以便后续的优化和目标代码生成。本实验涉及了文法分析的多个关键概念,包括文法压缩、预测分析和确定...

    计算机编译原理(文法压缩)

    ### 计算机编译原理中的文法压缩技术解析 #### 一、引言 在计算机科学领域,特别是在编译器设计与实现过程中,文法压缩技术被广泛应用于提高编译效率、减少存储空间占用等方面。本文将通过分析一段关于文法压缩的...

Global site tag (gtag.js) - Google Analytics