kgrffin 发表于 2024-4-4 11:16

分享近期学习的内容:文法

本帖最后由 kgrffin 于 2024-4-5 15:10 编辑

~~不会在论坛这种页面里编辑上下标,请见谅。~~

(一)概念

1.文法:描述语言语法结构的规则,抽象定义程序设计语言包含的字符串,
文法G是一个四元组:                  G=($V_N$,$V_T$,P,S)
                                                                                                                                                                                                                                                                                                
2.$V_N$是非终结符集合,非终结符有:                                                                                                                                                                           
大写字母S,通常表示开始符号;                                                                                                                                                                           
大写字母,如:A,B,C;                                                                                                                                                                        
代表程序构造的大写字母,如:E(表达式),T(项),F(因子)。                                                                                                                                                                           
非终结符可推出非终结符或终结符,可理解为用非终结符代表“非终结符+终结符”这个字符串,因此非终结符是缩写代替,不是语言的组成部分,不是最终结果。

3.$V_T$是终结符集合,终结符有:                                                                                                                                                                              
小写字母,如:a,b,c;                                                                                                                                                                        
运算符,如:+,*;                                                                                                                                                                        
标点符号,如:括号,逗号;                                                                                                                                                                           
数字0,1,...,9。                                                                                                                                                                              
终结符是语言的组成部分,是最终结果。                                                                                                                                                                              
$V_N$∩$V_T$=Ø      
                                                                                                                                                                                                                                                                                                                                                   
4.令V=$V_N$∪$V_T$,V为文法G的词汇表,V中的符号称为文法符号。   
                                                                                                                                                                                                                                                                                                                                                      
5.P是产生式集合,每个产生式是形如“α→β”的规则,即产生式是用终结符替代非终结符的规则(或非终结符推出终结符的规则),
其中α称为产生式的左部,α∈$V^+$且α中至少含有一个非终结符;β称为产生式的右部且β∈$V^*$。                                                                                                                                                                              
即左部不为空&&至少含有一个非终结符,右部可为空、非终结符、终结符的组合。

文法中,一个字母或一个数字或一个符号等都当做一个字符,$a^3$表示aaa。                                                                                                                                                                           
正则闭包:除空集外所有幂集,$A^+$=$A^1$∪$A^2$∪$A^3$∪...∪$A^n$                                                                                                                                                                           
闭包:$A^*$=$A^0$∪$A^+$,$A^0$={ε},ε空集。                                                                                                                                                                           
如:a*={a,aa,aaa,...,ε},(ab)*={ab,abab,ababab,...,ε}。

若干个产生式α→$β_1$,α→$β_2$,...,α→$β_n$的左部相同时,可简写为α→$β_1$|$β_2$|...|$β_n$,称$β_i$(1<=i<=n)为α的一个候选式。

6.S是语言的开始符号,S∈$V_N$,它至少要在一条产生式中作为左部出现。

文法是从开始符号S,用产生式P,到终结符$V_T$得到的内容(语言字符串)。

7.例:给出产出语言为{$a^n$$b^n$|n是大于等于1的整数}的文法。                                                                                                                                                                        
解:       蕴含条件:a,b每次出现的数量相同,且向左、右两边递增。                                                                                                                                                                           
G(S):    S→ab                                                                                                                                                                           
            S→aSb                     

(二)分类      
                                                                                                                                                                                                                                                                                                                                                   
乔姆斯基(Chomsky)把文法分成4种类型,4种类型都是G=($V_N$,$V_T$,P,S)的形式,0型到3型对产生式P的限制越来越大,文法描述能力越来越小(0型最大):   
                  

常见程序设计语言是2型上下文无关文法。

(三)推导

推导:对于2型上下文无关文法(左部必须是非终结符),从开始符号S出发,反复使用产生式,将产生式左部的非终结符替换为右部的文法符号序列,直到产生一个终结符的序列为止。

语法树(derivational tree,推导树)是用来描述上下文无关文法的句型推导的直观工具,一颗语法树应同时具有以下特征:
①每个结点都有一个标记,此标记是V中的一个文法符号;//每个结点要么是非终结符,要么是终结符。
②根的标记是S;//推导是从根S开始的。
③标记为A的结点至少有一个除它自己外的子孙,则A肯定在$V_N$中;//有子孙说明能推导出其他结点,根据2型定义A∈$V_N$。
④标记为A的结点的直接孩子从左到右的标记分别是$A_1$,$A_2$,...,$A_k$,那么A→$A_1$$A_2$...$A_k$一定是P中的一个产生式。//父结点推导出子结点的标记序列。

kgrffin 发表于 2024-4-4 12:12

昨天刚学的内容,如有错,望指正。

cattie 发表于 2024-4-4 12:31

本帖最后由 cattie 于 2024-4-4 12:37 编辑


用MD语法【发帖-高级模式下有个MD按钮,点了以后输入就行了】,可以用`$$`包含latex公式,这样就能打出上下标了。
诶,说到latex,tex这个东西在Compiler Principle里面也会学到,建议注意一下
像这样:
$G=(V_N,V_T,P,S)$
$V_N \cap V_T=\emptyset$


上面两个公式的MD如下:
$G=(V_N,V_T,P,S)$
$V_N \cap V_T=\emptyset$

kgrffin 发表于 2024-4-5 07:15

谢谢,我试试

kgrffin 发表于 2024-4-5 11:00

请问高级模式在哪,没找到。是不是我等级不够,没有呀。

kgrffin 发表于 2024-4-5 15:12

已重新编辑,谢谢,学到了
页: [1]
查看完整版本: 分享近期学习的内容:文法