- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第四章程序语言的设计;设?是一个字母表,
?L??*,L称为字母表?上的一个语言,
?w?L,w称为语言L的一个句子。;括号匹配串的语言
该语言是指所有的左括号和右括号相匹配的串的集合。
(),(()),()()等等都是该语言的句子。
)(,())等等不是该语言的句子。;如何产生这个语言呢?
即如何产生该语言所有句子呢?
递归方法提供了语言良好的定义方式。
;除基本句子外,其它句子按照相同的方法(可能不止一种方法)产生,
实际上,就是需要给出语言中所有句子的形成规则(语法规则),
可以使用多种方法描述形成规则。;自然语言的描述方式,采用如下的递归规则:
(1)()是该语言的最基本的句子;
(2)若S是句子,则(S)是句子;
(3)若S是句子,则SS是句子。;根据形成规则,可以
产生该语言的任意的句子;
判断某个串是否是该语言的句子——语法分析。
例如: 可以产生句子(())
而推断串(()))
不是句子。
;规则(的个数)是有限的,但可以产生无限个句子,甚至长度无限的句子,
因为规则是递归的。;BNF的描述方式
巴科斯和诺尔采用的巴科斯-诺尔范式(BNF:Backus-NaurForm)描述规则:
括号匹配串::=()
括号匹配串::=(括号匹配串)
括号匹配串::=括号匹配串括号匹配串;Chomsky采用的符号化(形式化)的描述方式,运用规则(称为产生式):
(1)S→()
(2)S→(S)
(3)S→SS
“→”代表“定义为”或者“是”,
它的左边和右边分别称为该产生式的左边和右边。
;根据产生式可以生成任意句子;
可以判断一个串是否为句子。
产生句子的过程:从S开始,反复利用产生式的右边代替产生式的左边(推导过程),最终可以产生括号匹配的句子。
;例:句子(())(()())的推导过程
S ?SS
?(S)S
?(())S
?(())(S)
?(())(SS)
?(())(()S)
?(())(()());产生式的个数是有限的,规则是递归的,所有的小括号匹配的串,都可以由产生式产生;
它们组成的集合就称为一个语言。;S称为非终结符,在推导过程中,可以被代替的符号。
(和)称为终结符,在推导过程中,不可以被代替的符号。
???是产生式系统的元符号,不属于终结符,也不属于非终结符。;偶数个0组成的串的语言。
规则的自然语言描述方式:
(1)00是该语言的基本的句子;
(2)若S是句子,则00S是句子。
形式化的描述方式:
S→00
S→00S;问题:
将产生式S→00S换成
S→0S0或S→S00或S→SS
是否还产生相同的语言?
结论:
一个语言,可以使用不同的产生式组合来产生。
;由奇数个1组成串的语言的形成规则。
;标识符(以字母开头的字母、数字的串)的产生(仅考虑小写字母)。;I→L
I→IL
I→ID
L→ a|b|c|d|e|f|g|h|I|j|k|l|m|n|o|p|q|r|s|t
u|v|w|x|y|z
D→ 0|1|2|3|4|5|6|7|8|9;上例是从标识符的形成角度思考问题。
从标识符的定义角度考虑,则?;D→0|1|2|3|4|5|6|7|8|9
不能简写为
D→0|…|9
;高级程序设计语言中的算术表达式的形成规则。;(1)单个变量是最基本的句子;
(2)若E是一个句子,则EAE是一个句子(其中A代表运算符+、-、*、/)
(3)若E是一个句子,则(E)是句子。;(1)E→i (i代表单个变量)
(2)E→EAE
(3)E→(E)
(4)A→+
(5)A→-
(6)A→*
(7)A→/;这组产生式
没有表示出运算符的优先级。;表示出运算符的优先级的产生式:
E→E+T|E-T|T
T→T*F|T/F|F
F→(E)|i
其中:E代表表达式,T代表项,F代表因子,(E)代表的是带小括号的表达式;
表示:先因子,再*、/,最后+、-
;如果使用%代表模运算(即取余数运算)、使用^代表指数运算,则有
E→E+T|E-T|T
T→T*F|T/F|T%F|A
A→F^A|F
F→(E)|i
;E→E+T|E-T|T
T→T*F|T/F|F
F→(E)|I
I→L
您可能关注的文档
- 程序设计语言与编译ppt课件_0 课程简介.pptx
- 程序设计语言与编译ppt课件_6.2 词法分析器实例.pptx
- 程序设计语言与编译ppt课件_7.6 LR分析法.pptx
- 程序设计语言与编译ppt课件_7.2 回溯分析法.pptx
- 程序设计语言与编译ppt课件_7.1 语法分析概述.pptx
- 程序设计语言与编译ppt课件_4.2.3 文法和语言.pptx
- 程序设计语言与编译ppt课件_4.1 程序设计语言的定义.pptx
- 程序设计语言与编译ppt课件_6.1 词法分析概述+单词的类别+单词的识别.pptx
- 程序设计语言与编译ppt课件_10.4 存储空间分配.pptx
- 程序设计语言与编译ppt课件_10.1 目标代码生成概述.pptx
原创力文档


文档评论(0)