2、高级语言的语法描述

本文详细探讨了高级程序设计语言的各个方面,包括语言的定义、语法结构(如词法规则和语法规则)、语义定义方法、程序的层次结构,以及不同类型的编程语言如过程式、应用式、基于规则和面向对象语言的特点。特别关注了上下文无关文法和上下文有关文法的区别。
摘要由CSDN通过智能技术生成

常用的高级程序设计语言

96a60931b4dd4c3f89a2e0db48513e0d.png

程序语言的定义

语法

一组规则,用它可以形成和产生合适的程序

词法规则:单词符号的形成规则。

单词符号的形成规则单词符号是语言中具有独立意义的最基本结构

一般包括:常数、标识符、基本字、算符、界符等

描述工具:有限自动机

语法规则:语法单位的形成规则。
语法单位通常包括:表达式、语句、分程序、过程函数、程序等;
描述工具:上下文无关文法

 bfbd5b9214fb49e1afac578ac91f1da1.png

语义

一组规则,用它可以定义一个程序的意义

描述方法
        自然语言描述
                二义性、隐藏错误和不完整性
        形式描述
                操作语义
                指称语义
                代数语义

程序的层次结构

 00ce7dda816b445eaef07b8f4f10d9dd.png

高级程序语言的一般特性

高级语言的分类

强制式语言(lmperative Languge)/过程式语言

        命令驱动、面向语句

        FORTRAN、C、Pascal, Ada

应用式语言(Applicative Language)

        注重程序所表示的功能,而不是一个语句接一个语句地执行
        LISP、ML

基于规则的语言( Rule-based Language)

        检查一定的条件,当它满足值,则执行适当的动作
        Prolog

面向对象语言(Object-Oriented Language)

        封装、继承和多态性
        Smalltalk,C++,Java

程序语言的语法基础

文法和语言

文法:描述语言的语法结构的形式规则

语言描述的几个基本概念:

字母表:一个有穷字符集,记为∑

字符:字母表中每个元素称为字符

∑上的(也叫字符串)  是指由∑中的字符所构成的一个有穷序列

不包含任何字符的序列称为空字,记为ε

用∑*表示∑上的所有字的全体,包含空字ε

        例如: 设 ∑={a, b},则

        ∑*={ε,a,b,aa,ab,ba,bb,aaa,...}

∑*的子集U和V的连接(积)定义为

UV={ab | aeq?%5CinU & beq?%5CinV }

示例:设 U={ a, aa } V= { b, bb }       

         UV={ ab, abb, aab, aabb}

V自身的 n次积记为     Vn=V V…V(n个)

Veq?%5E%7B0%7D={ε}

V*是V的闭包: V*=V0∪V1∪V2∪V3∪…

V+是V的正规闭包:V+=V V* 

规则(产生式) 是一有序对<u,x>,通常写作u->x。 

上下文无关文法

上下文无关文法G是一个四元组          

        G=(VT,VN,S,P),其中

VT:终结符(Terminal)集合(非空)

VN:非终结符(Noterminal)集合(非空),且VT eq?%5Ccup VN=eq?%5Cphi

S:文法的开始符号,Seq?%5CinVN

P:产生式集合(有限),每个产生式形式为 P->a, Peq?%5CinVN, aeq?%5Cin (VT eq?%5Ccap VN)*

开始符S至少必须在某个产生式的左部出现一次

b13dd44740e844d9a696f8a4a1ecfdfd.png

3b832a6664f7471aa0a028244e61e154.png

推导

直接推导

eb90a24d8f454ac0a5e0455ae24cb683.png

间接推导

56e27cefb60f4b51a2fb47deb9d1df3b.png

最左推导和最右推导 

2ddc922f23a44057874555d84a93eaeb.png

句子句型语言

cfb121b5447040658ec951d4a202e110.png

句子是特殊句型,句子一定是句型,句型不一定是句子。

例题

99b4ae1be0144b1d8629d06eb8c0f13a.png

0fd5bdbaf7a54f0c8b377828de192f1c.png

f0ad01f8c25f4097b0ac01725581b8b4.png

语法分析树和二义性

语法树

dcd20ec4d5de44108287b2738f3ad361.png

文法是二义的

一个文法某个句子存在两颗对应的不同语法树

语言的二义性

二义性问题是不可判断问题,即不存在一个算法,它能在有限步骤内,确切地判定一个文法是否是二义的

形式语言鸟瞰

乔姆斯基于1956年建立形式语言体系,他把文法分成四种类型:0,1,2,3型

5b896fea7a43492d91478c30425a22b6.png

文法是由非终结符(大写字母)和终结符(小写字母)以及“—>”组成的。给出几个例子就容易理解了。

A—> a、B—>dba、S—> Ab、adB—>d

0型

dc3babf94dd545f698de53d2c6415925.png

左边必须要包含这些元素或者元素组合中的至少一个非终结符,右边可以是这些元素的任意组合,这样就构成了0型文法。由于限制最少,所以见到的文法至少是一个0型文法。 

1型

466a689527804e5fa568d70ff9b65d1e.png

它在0型文法的基础之上,只添加了一个要求:右边的长度>=左边的长度(终结符或非终结符的个数)。A—> a、B—>dba则是1型文法,而adB—>d不符合1型文法要求

注意这里有一个特殊的形式  S—> ∑(∑表示空),也是一个1型文法。

2型

be40044e0dbe41f7b2c302dd43811d03.png

它在1型文法的基础上,有增加了一个要求:左边必须是非终结符(个数不限)。

如:AB—>de 属于2型文法,而 Aa—>DE则不是,因为Aa中含有a。

3型

d479f249d3a24679ae529282daad8fe5.png

上下文有关&&上下文无关

一、上下文无关文法
上下文无关文法就是说这个文法中所有的产生式左边只有一个非终结符,比如:

S -> aSb
S -> ab

这个文法有两个产生式,每个产生式左边只有一个非终结符 S,这就是上下文无关文法,因为你只要找到符合产生式右边的串,就可以把它归约为对应的非终结符。

二、上下文有关文法
比如:

aSb -> aaSbb
S -> ab

这就是上下文有关文法,因为它的第一个产生式左边有不止一个符号,所以你在匹配这个产生式中的S的时候必需确保这个S有正确的“上下文”,也就是左边的a和右边的b,所以叫上下文相关文法。

内容来源

令人头疼的编译原理之文法_编译原理文法-CSDN博客

【编译原理】什么是上下文无关文法、上下文有关文法?_上下文无关文法和上下文有关文法-CSDN博客



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值