📜  上下文无关文法(1)

📅  最后修改于: 2023-12-03 15:21:28.183000             🧑  作者: Mango

上下文无关文法

概述

上下文无关文法(Context-free Grammar, CFG)是一种形式化的文法,用于描述上下文无关语言。它由 4 个部分组成,包括一个起始符号 S,一个有限的终止符号集合 T,一个有限的非终止符号集合 N 和一组产生式规则 P。

一个上下文无关文法可以用元组 G=(N, T, P, S) 来表示,其中:

  • N 是非终止符号集合。
  • T 是终止符号集合。
  • P 是产生式规则的有限集合,每个产生式规则是一个非终止符号和一个符号串的对应关系。
  • S 是文法的起始符号。

上下文无关文法用于编程语言的语法、编译器、解释器等方面。

产生式规则

产生式规则是 CFG 中最重要的概念,它定义了文法中的语法规则。产生式规则可以用 BNF(Backus-Naur Form)或 EBNF(Extended Backus-Naur Form) 表示。

BNF 语法:

A ::= β

A 表示非终止符号,β 表示由终止符号和非终止符号组成的符号串。

举个例子,如果我们定义了一个简单的文法:

S ::= aSb | ε

其中 S 表示起始符号,它可以通过非终止符号 aSb 和 ε(空串)来生成符号串。

EBNF 语法:

A = β {C} ;

{C} 表示 C 可重复出现 0 次或多次。

推导

推导是一种基于产生式规则进行语言生成或分析的过程。在推导过程中,从一个符号串开始,根据产生式规则逐步推导出符合文法规则的符号串。

举个例子,如果我们仍然使用上述文法 S ::= aSb | ε,从 S 开始推导,可以得到以下输出:

S -> ε
S -> aSb -> ab
S -> aSb -> aabbb
S -> aSb -> aaabbbb
S -> aSb -> aaaabbbbb
...
自顶向下语法分析

自顶向下语法分析是一种基于分析树的语法分析技术,它通过从语法树的根节点开始,自上而下地进行分析,通过匹配产生式规则来递归地展开规则,直到最终生成符合文法规则的符号串。

常用的自顶向下语法分析算法有:LL(1) 分析器、递归下降分析器。

自底向上语法分析

自底向上语法分析是一种基于移进-规约的语法分析技术,它通过将输入符号串移入栈中,根据栈顶符号和输入符号串的结合,选择合适的产生式进行规约,最终生成符合文法规则的符号串。

常用的自底向上语法分析算法有:LR 分析器、LALR 分析器、SLR 分析器。

总结

上下文无关文法是编程语言、编译器、解释器等多领域常用的语法规则。掌握上下文无关文法,可以更好地理解 DSL、EBNF 等工具和技术,深入理解编程语言的语法规则。