- 1、本文档共84页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章文法和语言 ;课前思考;学习目标;学习指南;难重点;知识结构;引言和预备知识;语法
任何语言程序都可以看成是一定字符集(字母表)上的字符串
语法使得这串字符形成一个形式上正确的程序
语法=词法规则+语法规则
例如:0.5*x1+c
0.5、x1、c、*、+是语言的单词符号
0.5*x1+c是语言的语法单位;词法
单词符号
语言中具有独立意义的最基本结构
词法规则
词法规则规定了字母表中哪些字符串是单词符号
单词符号一般包括:常数、标识符、基本字、算符、界限符等
我们用正规式和有限自动机理论来描述词法结构和进行词法分析;语法
单词符号
语法单位
表达式、子句、语句、函数、过程、程序
语法规则
规定了如何从单词符号来形成语法单位
现在多数程序语言使用上下文无关文法来描述语法规则
语言的词法规则和语法规则定义了程序的形式结构,是判断输入字符串是否构成???个形式上正确的程序的依据;例,对于一个PASCAL程序来说,一个上下文无关文法可以定义
A:=B+C 是合乎语法的,
而A:=B+ 是不合乎语法的。;语义
对于一个语言来说,不仅要给出它的词法、语法规则,而且要定义它的单词符号和语法单位的意义
离开语义,语言只是一堆符号的集合
各种语言中有形式上完全相同的语法单位,含义却不尽相同
对某种语言,可以定义一个程序的意义的一组规则称为语义规则
目前,大多数编译程序使用基于属性文法的语法制导翻译方法来分析语义;对于高级程序设计语言及其编译程序来说,语言的语法定义是很重要的。本章主要介绍语法结构的形式描述问题,编译原理的主要内容也可以归纳为应用形式语言理论,并将它贯穿于词法分析和语法分析两个阶段;*;*;*;句子:字母表上符合某种规则构成的串
语言:字母表上句子的集合
注:约定用a, b, c…表示符号;用?, ?, ?…表示符号串;用A, B, C表示其集合;*;符号串的方幂:设?是符号串,把?自身连接n次得到符号串?,即?=???…??,称为符号串?的方幂,写作?=?n。
符号串集合:若集合A中的一切元素都是某字母表上的符号串,则称A为字母表上的符号串集合。;两个符号串集合A和B的乘积(连接): AB={??|? A且? B}
注:1)串集的自身乘积称作串集的方幂
2)A0={?}
字母表V的n次方幂是字母表V上所有长度为n的串集;*;3.1 文法的直观概念;比如:“我是大学生。”是汉语的一个句子
汉语句子可以是由主语后随谓语而成,构成谓语的是动词和直接宾语
句子::=主语谓语
主语::=代词|名词
代词::= 我 | 你 | 他
名词::= 王明 | 大学生 | 工人 | 英语
谓语::=动词直接宾语
动词::= 是 | 学习
直接宾语::=代词|名词;一旦有了一组规则以后,我们可以按照如下方式用它们去推导或产生句子。我们开始去找::=左端的带有〈句子〉的规则并把它表示成::=右端的符号串
规则中的“::=”也常用“?”表示,含义是使用一条规则,代替=左边的某个符号,产生?右端的符号串。
注意∶文法中,描述某个特定的语法成分的规则可能不只一条。;得到句子“我是大学生”的全部动作过程是:
句子?主语谓语 ? 代词谓语 ?我谓语 ?我动词直接宾语 ?我是直接宾语 ?我是名词 ? 我是大学生;“我是大学生”的构成是符合上述规则
“我大学生是”不符合上述规则
这些规则成为我们判别句子结构合法与否的依据,换句话说,这些规则看成是一种元语言,用它描述汉语。这里仅仅涉及汉语句子的结构描述。这样的语言描述称为文法。;3.3 文法和语言的形式定义;文法G定义为四元组(VN,VT,P,S)
VN :非终结符集
VT :终结符集
P:产生式(规则)集合
S:开始符号(或识别符号)
VN∩VT= φ, S∈VN
V=VN∪VT,称为文法G的文法符号集合;句子的语法结构,可以用一组规则来描述。
规则也称为“重写规则”、“产生式”或“生成式”,是形如?→?或?::=?的(?,?)有序对,且?∈V+, ?∈V* ,V为某字母表。
?称为规则的左部(或产生式的左部)
?称为规则的右部(或产生式的右部)
这里使用的符号→(::=)读作“定义为”;例3.1 文法G=(VN,VT,P,S)
VN = { S }, VT ={ 0, 1 }
P={ S→0S1, S→01 }
S为开始符号;例3.2 文法G=(VN,VT,P,S)
VN ={标识符,字母,数字}
VT ={a,b,c,…x,y,z,0,1,…,9}
P={标识符→字母
标识符→标识符字母
标识符→标识符数字
文档评论(0)