- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章文法
文法与语言
一个程序设计语言是一个记号系统,同自然语言一样,它的完整的定义应包括语法和语义两个方面。所谓一个语言的语法是指一组规则,用它可以形成和产生一个合适的程序。上下文无关文法完全可以描述程序设计语言的语法。语法规定了特定符号序列的合法性,而与符号的含义没有关系。
比如在C语言中,X=Y+Z、X+=Y、X++等都是合法的,而X=X*则非法。这和我们在自然语言中遇到的情况相同。但是在程序设计语言中,表达式组成部分的类型也决定着它们的合法性。
对于语义的分析与处理到目前为止仍然没有公认的形式系统用于自动构造正确的编译程序。
2.1 文法的概念
从形式语言的角度看,一个语言也就是字符串集。如果字符串集是有穷的,可以用枚举的办法表示出来。当集合无穷时,枚举的办法就不行了,需要寻找合适的有穷表示方法----文法就是表示无穷字符串集的强有力的一种工具。
我们先来分析汉语句子的文法表示,采用巴克斯范式(BNF或EBNF):
句子 → 主语·谓语
主语 → 代词 ∣ 名词
代词 → 我 ∣你∣他
名词 → 司机∣农民∣学生∣汽车∣锄头
谓语 → 动词·直接宾语
动词 → 学习∣拿起∣开
直接宾语 → 代词∣名词
其中的每一条称为产生式或语法规则,符号“→”也可以写成“∷=” ;符号“·”和“∣”是集合运算符号,“·”表示“连接”,该符号往往被省略,“∣”表示“或”,该符号两边的符号串称候选。
由上面的规则可以产生或推导出句子,引进符号“=>”表示推导,比如句子“司机开汽车”的推导过程为:
句子=主语·谓语=名词·谓语=司机·谓语=司机·动词·直接宾语
=司机·开·直接宾语=司机·开·名词=司机开汽车
试推导句子:农民拿起锄头
2.2 符号和符号串
每种程序设计都有它的字符集,其中的字符用来构造单词,单词构造更大的语法单位,表达式、语句等复合对象。其中,单词又是最小的语义单位,它不包含任何子结构,因此每个单词是简单的字符序列。
任何程序设计语言都是某一基本符号集上的字符序列,自动机、正规表达式是描述程序设计语言中单词结构的强有力工具。下面介绍有关的基础知识和基本概念。
字母表:非空有限集,一般用∑表示,如∑={a,b,c}
符号: ∑中的元素称为符号。
符号串:符号的有穷序列称符号串,也可称为字,用ε表示空字符串。
长度:符号串中包括的符号的个数,如︱ab︱=2,︱ε︱=0
连接:设x和y是字符串,则称x·y是它们的连接,符号‘·’一般可省略。
对于任意字符串β,有βε=εβ=β。
乘积:设A和B是符号串集,则用AB表示它们的乘积:
AB={xy︱x∈A,y∈B },显然{ε}A=A{ε}=A
空集:不含任何元素的集合记为φ,对任何字符串集A有:φA=Aφ=A
方幂:设A是字符串集,则A的方幂定义为:
A0 ={ε};A1 =A;An =An-1 A
特别地,若x是∑中的字符,则x的n次自身连接即xn
闭包、正闭包、星闭包:设A是符号串集,用A+表示A的正闭包,用A*
表示A的星闭包,两者统称为A的闭包。
A+=A1∪A2∪···∪An∪···
A*=A0∪A1∪A2∪···∪An∪···
2.3 上下文无关法
定义2.1
文法是一个四元组:G=(VN,VT,P,S)
其中,VN为非终结符集;VT为终结符集;P为产生式集合,是一个非空有穷集;S称为开始称号,S∈VN,且VN∩VT=φ。
定义2.2
1.直接推导:设x和y是符号串,若使用一次产生式可以从x推导出y,则称y是x的直接推导,记为x==y。
2.推导:若使用若干次产生式进行推导后,从x推导y,则称y是x的推导,记为xy。
3.星推导:当且仅当x=y或者xy时星推导,记为xy。
4.句型:称x为句型,如果有Sy,S是文法的开始符号。
5.句子:称x为句子,如果Sy,y中不包含非终结符即y∈VT*。
6.语言:所有句子的集合称为语言。
L(GS)={x | Sy ,y∈VT*}
定义2.3 文法等价:若L(G1)=L(G2),则称文法G1和G2是等价的。
约定:用大写字母表示非终结符;用小写字母表示终结符;用希腊字母α、β、γ等或小写字母表示符号串。
定义2.4
称A是直接左递归的,若有产生式:A→A···
称A是直接右递归的,若有产生式:A→···A
称A是左递归的,若有推导式:AA···
称A是右递归的,若有推导式:A···A
称A是递归的, 若有推导式:A···A···
2.4 文法的类型
Chomsky在1956年的时候把文法分为四类:0型、1型、2型和3型文法。
0型文法(短语结构文法):其产生式具有如下形式:α→β 其中α、β∈(VT∪V
文档评论(0)