从文法的定义讲起

1、非终结符、终结符、规则、开始符。

文法G定义为四元组(Vn,Vt,P,S)。
其中Vn为非终结符(或语法实体,或变量)集。这样说或许很抽象,那到底什么是非终结符了?从字面上理解,这个符号不是终结的,它只是其中的一部分,在这个小小的社会中它只是其中的小小一份子。一般约定用尖括号括起来的是非终结符,一般用大写字母表示非终结符。
非终结符是可以被取代的符号
Vt为终结符。这样说或许很抽象,那么到底什么是终结符了?首先从字面理解,终结符集,里面的字符很厉害,能够终结掉整个功能,或者说结束掉整个功能。厉害的往往有两面性,既可以毁灭地球,也可以拯救地球。(哈,扯远了啊!)
终结符是一个形式语言的基本符号。就是说,它们能在一个形式语法的推导规则的输入或输出字符串存在,而且它们不能被分解成更小的单位。确切地说,一个语法的规则不能改变终结符。例如说,下面的语法有两个规则:
x -> xa
x -> ax
在这种语法之中,a是一个终结符,因为没有规则可以把a变成别的符号。不过,有两个规则可以把x变成别的符号,所以x是非终结符。一个形式语法所推导的形式语言必须完全由终结符构成。
S称作识别符或开始符。一般约定,第一条产生式的左部是识别符;
P为规则(α-β)的集合,这个在我看来最好理解。什么是规则了,它又称为产生式、重写规则或生成式,这些都是它的小名哈,以后见到这样的描述不要感到陌生。α-β读作α定义为β,那它到底是什么意思了?我举个例子你就明白了!α定义为β就相当于句子可以定义为主语和谓语。(<句子>::=<主语><谓语>)。一个句子可以由主语和谓语两部分组成,有人说不懂什么是主语,什么是谓语?这就没办法了。


2、推导,闭包,正闭包,符号串的方幂

定义这个文法,定义这些规则,都是为了产生句子或者描述句子,进而描述这个世界。把现实世界的东西抽象化,来更好的分析,总结规律,达到进步的目的。(个人见解,哈。)
为定义文法所产生的语言,还需要引入推导的概念。即定义V*中的符号之间的关系:直接推导=>、长度为n(n>=1)的推导=>(箭号上面有个加号)、长度为n(n>=0)的推导=>(箭号上面有个*号)。
现在又有个问题,这个V*又是个什么鬼,好像很陌生的样子。
这个就要说到闭包了,V*称为集合V的闭包。指定字母表V后,可用V*表示V上的所有有穷长的串的集合。例如,V={0,1},则V*={ε,0,1,00,01,10,11,000,001,010……}。这里还有个正闭包的概念。这些都很抽象,还有待进一步理解。
这里的表和串也要理解,字母表是元素的集合,元素是离散的。符号串是由字母表中的符号组成的任何有穷序列。
符号串的方幂,例如把符号串x自身相连n次得到符号串z,即z=xx…xx,称为符号串x的方幂,即把符号串x相继地重复写n次,写作z=xn. 
X0=ε。
这些知识点串起来,不就解决了前面的问题了吗?
当你想了解3的时候,你必须知道2,你想知道2的时候,你必须知道1.很多时候,我们解决问题的方式就是这样递进的,追根溯源式的分析,很有逻辑性哈。很多大学老师讲的课同学们都听不懂,很大一部分原因可能是那个知识点是从3开始的,你都没注意2和1,不知道2和1,你当然听不懂!所以,当出现一门较难的课时,就要多花时间去预习,去查资料,去理解,去了解1和2.而不是直接等着老师去将,老师因为课时等种种原因,不可能从1开始讲起。
所以,你懂的,哈,哈。
最后一句,书读百遍,其意自现。古人的话还是有道理的。

<think>好的,用户想了解上下文无关文法(CFG)的概念、定义、示例、语法树以及它的用法。首先,我需要明确CFG的基本定义。根据引用[3],CFG由四个部分组成:终结符集合、终结符集合、产生式规则和开始符号。例如,G3的例子就展示了这些组成部分的结构。 接下来,用户需要示例。我应该举一个简单的例子,比如四则运算表达式,这样可以直观展示CFG如何生成字符串。引用[2]提到了代数表达式的语法分析树,这可以帮助说明语法树的结构。需要注意的是,CFG可能存在歧义性,不同的语法树会导致不同的解析结果,比如引用[2]中提到的歧义性问题。 然后,关于语法树的部分,我需要解释如何根据产生式规则构建树状结构,并说明每个节点如何对应规则的应用。引用[4]中的例子可能有用,比如消除左递归的方法,但用户的问题可能不需要涉及这么深入,所以保持基础即可。 在用法方面,应用场景包括编译器设计、自然语言处理等,这里可以结合引用[1]中提到的CFG转PDA的流程,说明CFG在自动机理论中的应用。此外,引用[4]提到的LL(1)分析法也属于CFG的应用之一,但用户可能只需要简单的例子。 最后,生成相关问题时要覆盖定义、设计、歧义性、应用和转换等方面,确保问题能引导进一步学习。需要检查每个部分是否符合格式要求,比如数学表达式是否正确使用$符号,独立公式是否用$$,并正确添加引用标识。</think>### 上下文无关文法(CFG)详解 #### 一、定义 上下文无关文法(Context-Free Grammar, CFG)是一种形式文法,用于描述形式语言的生成规则。其定义为四元组: $$ G = (V, \Sigma, R, S) $$ - $V$:终结符集合(如变量) - $\Sigma$:终结符集合(如字母、符号) - $R$:产生式规则集合(如 $A \to \alpha$,其中 $A \in V$,$\alpha \in (V \cup \Sigma)^*$) - $S$:开始符号($S \in V$)[^3] #### 二、示例 以简单四则运算表达式为例: $$ \begin{aligned} &E \to E + T \mid E - T \mid T \\ &T \to T * F \mid T / F \mid F \\ &F \to (E) \mid \text{num} \mid \text{id} \end{aligned} $$ - 终结符:$E$(表达式)、$T$(项)、$F$(因子) - 终结符:$+,-,*,/, (, ), \text{num}, \text{id}$ - 开始符号:$E$ #### 三、语法树 对表达式 $3 * (a + 5)$,其语法树为: ``` E | T / | \ T * F | | F (E) | | \ num E + T (3) | | T F | | F num (5) ``` 每个节点对应产生式的应用,根节点为开始符号[^2]。 #### 四、关键特性 1. **歧义性**:若一个字符串存在多棵语法树,则CFG是歧义的。例如: $$ E \to E + E \mid E * E \mid \text{num} $$ 对表达式 $2 + 3 * 4$,可能生成不同计算顺序的语法树。 2. **规范化**:可通过Chomsky范式(CNF)消除歧义,例如限制产生式形式为 $A \to BC$ 或 $A \to a$。 #### 五、应用场景 1. **编译器设计**:用于解析编程语言的语法结构(如算术表达式、控制语句)。 2. **自然语言处理**:生成句子的语法结构分析。 3. **自动机理论**:与下推自动机(PDA)等价,可通过CFG描述PDA接受的语言[^1][^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值