吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 515|回复: 5
收起左侧

[学习记录] 分享近期学习的内容:文法

[复制链接]
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型最大):   
                    
image.png
常见程序设计语言是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
已重新编辑,谢谢,学到了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 06:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表