- 1、本文档共45页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章文法和语法[lly]3
第3章 文法和语言;1、语言;研究程序设计语言及研究的三个方面:
每个程序构成的规律(语法 Syntax)
每个程序的含义(语义 Semantics)
每个程序和使用者的关系(语用 Pragmatics)
语言三个方面定义:
语法 -- 表示构成语言句子的各个记号之间的组合规律
语义 -- 表示按照各种表示方法所表示的各个记号的特定含义。(各个记号和记号所表示的对象之间的关系)
语用 --表示在各个记号所出现的行为中,它们的来源、使用和影响。;以自然语言为例(用 EBNF 描述一种语言:);〈句子〉 ? 〈主语〉〈谓语〉 ? 〈代词〉〈谓语〉 ? 我〈谓语〉 ? 我〈动词〉〈直接宾语〉 ? 我是〈直接宾语〉 ? 我是〈名词〉 ? 我是大学生
思考:
“?”的含义?
“我大学生是” 与“大学生是王明”是句子?;3、程序设计语言与文法关系:
一个程序设计语言是一个记号系统,如自然语言一样,由语句组成,完整的定义应包含语法与语义两个方面。语法规定了语句形成的规则,(哪些符号序列是合法的,而与其含义无关);语义不仅要限定语法规则(静态),而且要表明程序要做什么(动态)。
文法是阐述语法规则的工具,是形式语言理论基础。
为语言的语法描述寻求工具
工具要对程序设计语言给出精确无二义的语法描述。(严谨、简洁、易读)
形式工具--形式语言抽象地定义为一个数学系统。“形式”是指这样的事实:语言的所有规则只以什麽符号串能出现的方式来陈述。;字母表?:元素的非空有穷集合。(符号集)
符号:字母表中的元素。;例如: Σ={0,1}ε,0,1,00,01,11,1001110等都是?上的符号串.;2)串的头与尾
如果 z = xy 是一符号串,那么:
x 是 z 的头,y 是 z 的尾;
如果 x 非空,那么 y 是固有尾;如果 y 非空,那么 x 是固有头。;3、符号串的运算
1)符号串的长度:符号串中符号的个数.符号串s的长度记为|s|。 ε的长度为0
2)连接:符号串x、y的连接,是把y的符号写在x的符号之后得到的符号串xy例: x=ST,y=abu 则 xy=STabu |x|=2,|y|=3,|xy|=5
εx = xε= x
3)方幂:符号串x自身连接n次得到的符号串 xx…xx(n个x)定义为 x n
x0=ε, x1=x, x2=xx, x3=xxx
x=AB, 则 x0=ε, x1=AB, x2=ABAB, x3=ABABAB
对于 n0, x n = xxn-1 = xn-1x
4)符号串集合:若集合A中一切元素都是某字母表?上的符号串,则称A为字母表?上的符号串集合。;Σ* = Σ0 ∪ Σ1 ∪ Σ2 … ∪ Σn …
Σ+ = Σ1 ∪ Σ2 … ∪ Σn …
Σ* = Σ0 ∪ Σ+
Σ+ = ΣΣ* = Σ* Σ
Σ+ = Σ* -{ε};1、规则(重写规则、产生式或生成式):
是形如α→β或α∷=β的(α,β)有序对,其中α是某字母表V的正闭包V+中的一个符号,β是V*中的一个符号。(α∈V+,β∈V* why?)
α称为规则的左部(或生成式的左部)。
β称为规则的右部(或生成式的右部)。
例:
〈句子〉::= 〈主语〉〈谓语〉
〈主语〉::= 〈代词〉|〈名词〉
〈代词〉::= 你 | 我 | 他;2、文法G定义为四元组(VN,VT,P,S)
元素说明:
VN :非终结符集
VT :终结符集
P:产生式(规则)集合
S:开始符号(识别符号)
VN、VT 和 P 是非空有穷集。S 至少在一条规则中作为左部出现。
VN∩VT= φ, S∈VN
V=VN∪VT,称为文法G的字母表(字汇表);例3.2 文法G=(VN,VT,P,S)
VN ={标识符,字母,数字}
VT ={a,b,c,…x,y,z,0,1,…,9}
P={标识符→字母
标识符→标识符字母
标识符→标识符数字
字母→a,…, 字母→z
数字→0,…, 数字→9 }
S=标识符
思考:
C语言的标识符(变量命名)如何用文法定义?;文法习惯上只将产生式写出。并有如下约定:
第一条产生式的左部是开始符号
用尖括号括起的是非终结符,否则为终结符。或者大写字母表示非终结符,小写字母表示终结符
G可写成G[S],其中S是开始符号;3、推导的定义;例 文法G=(VN,VT,P,S)
VN ={标识符,字母,数字}
VT ={a,b,c,…x,y,z,0,1,…,9}
P={标识符→字母
标识符→标识符字母
标识符→标识符数字
字母→a,…, 字母→z
数字→0,…, 数字→9
文档评论(0)