跳转至

Ch2 Syntax Definition

文法的定义:Definition of Grammars

定义

  • Grammar: a Set of Rules to Describe a Language.
  • Language: a Sorted Set of Strings over some fixed Alphabet.
  • 关系:Grammar Abstracts the Language to Cover All Its Strings. (文法是对语言的抽象,覆盖了语言的所有字符串)
  • ∅: Empty Language (Set of Strings)
  • 𝜺: Empty String (Set of Symbols)

组成

  • Grammar G[S] = (VN, VT, P, S)
    • VT: A set of Terminal Symbols (终结符)
      • Atomic: 基本符号,不可再分
    • VN : A set of Non-terminals (非终结符)
      • A Non-terminal: a set of strings of Terminals
    • P: A set of Productions (生成式、规则)
      • A Non-terminal, an Arrow, a sequence of Terminals and/or Non-terminals
    • S: A Start Symbol (开始符)
      • A Non-terminal

推导:Derivations

定义

  • A Grammar derives strings by beginning with the Start Symbol and repeatedly replacing a Non-terminal with Terminals via its Productions. (文法通过从开始符开始,反复用生成式将非终结符替换为终结符来派生字符串)
    • 推导(Derivation):反复根据生成规则用终结符替换非终结符
    • 归约(Reduction):推导的反过程

语法分析(Syntax Analysis, Parsing)

  • given a sequence of Terminals, figure out Whether it can be Derived from the Grammar and How if possible. (给定一个终结符序列,判断它是否可以由文法推导而来,如果可以,推导过程是什么)
  • 一个语言可能有多个文法描述,而一个文法只会派生一个唯一语言

文法的二义性:Ambiguity

定义

  • 语法树(Parse Tree): A Graphical Representation of a Derivation without the Order of Applying Productions. (语法树是一个图形表示,表示了一个推导过程,但不考虑生成式应用的顺序)
  • 二义性(Ambiguity): When Parsing, given a sequence of Terminals, a Grammar is Ambiguous if there are more than one Parse Tree for the Derivation.(二义性是指一个文法可以产生多棵语法树)

Fix the Grammar

  • Example:
    • stmt -> if expr then stmt | if expr then stmt else stmt | other
    • if E1 then if E2 then S1 else S2
  • Match each else with the closest unmatched then
    • the statement appearing between a then and an else must be “matched”
    • the interior statement must not end with an unmatched (open) then
  • Listing All Cases then Tidying Them Up
    • if expr then matched_stmt
    • if expr then open_stmt
    • if expr then matched_stmt else matched_stmt
    • if expr then matched_stmt else open_stmt
    • so that:
      • matched_stmt -> if expr then matched_stmt else matched_stmt | other
      • open_stmt -> if expr then matched_stmt | if expr then open_stmt | if expr then matched_stmt else open_stm
    • finally:
      • stmt -> matched_stmt | open_stmt
      • matched_stmt -> if expr then matched_stmt else matched_stmt | other
      • open_stmt -> if expr then stmt | if expr then matched_stmt else open_stmt

文法和语言的分类:Classes of Languages

  • 范围由 Type 0 到 Type 3 逐渐缩小