跳转至

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 逐渐缩小