语言及其文法

基本概念

字母表

  • 字母表\(\Sigma\):有穷符号集合

字母表上的运算

  • 乘积

    \(\Sigma\)1\(\Sigma\)2 = { ab|a\(\in\)\(\Sigma\)1, b\(\in\)\(\Sigma\)2 }

  • n次幂

    字母表的n次幂:长度为n的符号串构成的集合

    • \(\Sigma\)0 = { \(\varepsilon\) }
    • \(\Sigma\)n = \(\Sigma\)n-1\(\Sigma\) , n$\geq$1
  • 正闭包

    字母表的正闭包:长度正数的符号串构成的集合

    \(\Sigma\)+ = \(\Sigma\) U \(\Sigma\)2 U \(\Sigma\)3 U ...

  • 克林闭包

    字母表的克林闭包:任意符号串(长度可以为零)构成的集合

    \(\Sigma\)* = \(\Sigma\)0 U \(\Sigma\)+ = \(\Sigma\)0 U \(\Sigma\) U \(\Sigma\)2 U \(\Sigma\)3 U ...

  • \(\forall\) x \(\in\) \(\Sigma\)*,x称为\(\Sigma\)上的一个串
  • 串是字母表中符号的一个有穷序列
  • 串s的长度|s|:s中符号的个数
  • 空串 \(\varepsilon\) :长度为0的串

串上的运算

  • 连接

    • 如果 x 和 y 是串,那么 x 和 y 的连接是把 y 附加到 x 后面而形成的串,记作 xy

    • 空串是连接运算的单位元,即对于任何串s 都有:\(\varepsilon\)s = s\(\varepsilon\) = s
    • 设x,y,z 是三个字符串,如果 x= yz则称 y 是 x 的前缀,z 是 x 的后缀

  • 串s的n次幂:将n个s连接起来

    • s0 = \(\varepsilon\)
    • sn = sn-1s , n$\geq$1

文法定义

形式化定义

G = ( VT , VN , P , S )

image-20200315091113734

  • VT:终结符集合

    终结符(token):文法定义的基本符号

  • VN:非终结符集合

    非终结符(nonterminal):表示语法成分的符号,又称语法变量

    VT \(\cap\) VN = \(\phi\)

    VT \(\cup\) VN :文法符号集

  • P:产生式集合

    产生式:描述终结符和非终结符组合成串的方法

    产生式一般形式:\(\alpha\) \(\rightarrow\) \(\beta\) \(\alpha\)定义为\(\beta\)

    产生式头部/左部:\(\alpha\) \(\in\) ( V \(\cup\) VN )+

    产生式体/右部:\(\beta\) \(\in\) ( VT \(\cup\) VN )*

  • S:开始符号

    开始符号表示该文法中最大的语法成分

    S \(\in\) VN

符号约定

image-20200315093558291

终结符

  • 字母表中排在前面的小写字母

  • 运算符
  • 标点符号
  • 数字
  • 粗体字符串

非终结符

  • 字母表中排在前面的大写字母
  • 字母S:通常表示开始符号
  • 小写、斜体的名字
  • 代表程序构造的大写字母:E(表达式)、T(项)、F(因子)

文法符号

  • 字母表中排在后面的大写字母(即终结符或非终结符)

终结符号串

  • 字母表中排在后面的小写字母(包括空串

文法符号串

  • 小写希腊字母(包括空串

开始符号

  • 除非特别声明,第一个产生式的左部是开始符号

产生式简写

  • 一组有相同左部的\(\alpha\)产生式:\(\alpha\)\(\rightarrow\)\(\beta\)1, \(\alpha\)\(\rightarrow\)\(\beta\)2, ... , \(\alpha\)\(\rightarrow\)\(\beta\)n,可简记为:\(\alpha\)\(\rightarrow\)\(\beta\)1|\(\beta\)2|...|\(\beta\)n

    \(\beta\)1\(\beta\)2\(\beta\)n 称为\(\alpha\)的候选式

语言定义

推导和归约

image-20200315094745933

image-20200315142353690

  • 推导:用产生式的右部替换左部

    image-20200315094609937

  • 归约:用产生式左部替换右部

句型和句子

image-20200315095125865

image-20200315095320615

语言的形式化定义

image-20200315095549072

语言上的运算

image-20200315100038791

文法分类

0型文法(PSG)

产生式左边至少有一个非终结符

image-20200315124230110

1型文法(CSG)

产生式右边比左边长

image-20200315124301176

  • 非终结符A上下文均为 \(\alpha\)1 \(\alpha\)2 时,才可以替换为\(\beta\)

2型文法(CFG)

产生式左边只由非终结符

image-20200315124412154

3型文法(RG)

产生式左边是一个非终结符,右边是0/1个非终结符和终结符号串

w:终结符号串

右边非终结符在左即左线性,在右即右线性

image-20200315124459549

四种文法间的联系

image-20200315124529951

CFG分析树

基本概念

image-20200315124717615

图形化表示

分析树是推导的图形化表示

image-20200315141559487

句型的短语

image-20200315142036496

二义性文法

  • 如果一个文法可以为某个句子生成多棵分析树,则该文法是二义性的
  • 对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的

猜你喜欢

转载自www.cnblogs.com/localhost-ha/p/12503622.html
今日推荐