• 语言及其文法


    基本概念

    字母表

    • 字母表(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) ( ightarrow) (eta) (alpha)定义为(eta)

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

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

    • S:开始符号

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

      S (in) VN

    符号约定

    image-20200315093558291

    终结符

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

    • 运算符

    • 标点符号

    • 数字

    • 粗体字符串

    非终结符

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

    文法符号

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

    终结符号串

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

    文法符号串

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

    开始符号

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

    产生式简写

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

      (eta)1(eta)2(eta)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 时,才可以替换为(eta)

    2型文法(CFG)

    产生式左边只由非终结符

    image-20200315124412154

    3型文法(RG)

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

    w:终结符号串

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

    image-20200315124459549

    四种文法间的联系

    image-20200315124529951

    CFG分析树

    基本概念

    image-20200315124717615

    图形化表示

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

    image-20200315141559487

    句型的短语

    image-20200315142036496

    二义性文法

    • 如果一个文法可以为某个句子生成多棵分析树,则该文法是二义性的
    • 对于任意一个上下文无关文法,不存在一个算法,判定它是无二义性的;但能给出一组充分条件,满足这组充分条件的文法是无二义性的
  • 相关阅读:
    C语言初学者代码中的常见错误与瑕疵(22)
    ANSI C (83)和87 ANSI C 这两个标准存在么?
    常见的认证
    python入门(一)
    Altium Designer重装后图标都变白板或都变一样的解决方法
    转:关于S参数的一些理解
    射频与微波测量之S参数
    驻波比
    PCB特征阻抗计算
    函数的形参(非引用形参、指针形参、引用形参)
  • 原文地址:https://www.cnblogs.com/localhost-ha/p/12503622.html
Copyright © 2020-2023  润新知