语言(Language)和语法(Syntax)简述
- 语言Language和语法Syntax简述
- 一字母表和字符串
- 二语法和语言
- 1几个基本概念
- a语法Grammer
- b推导Derivation
- c归纳Reduction
- d语法规则的递归定义Recursive definition of grammar rules
- e一些符号
- 2形式化定义
- a语法定义
- b语法分类
- 1几个基本概念
语言(Language)和语法(Syntax)简述
什么是语法?如何表示一种语言的语法?如何验证语言是否符合语法?怎样归纳语言的语法特征?……在正式学习编译原理之前,我们需要对这些概念有一定的认识。
语言有语法(syntax)、语义(semantics)和语用(pragamatics),符合语法则称为合法的(legal),语义正确则是合理的(rational),语用描述的是语言的多义性。分析(Analyse)指的是语法和语义的分析。
一、字母表和字符串
如果令A表示字母表,A0表示空字符串,A1表示由一个字符表示的单词,我们可以这样表示一个单词:
也就是一个单词可以由n个字符组成,A*就是在字母表A基础上所有字符串的闭包,我们就可以用(A*)*表示由单词组成的句子。
把空字符串去掉后,A+叫做正闭包。
因此,一种描述语言的方式是:
语言是字母表上正闭包的子集。
二、语法和语言
1、几个基本概念
(a)语法(Grammer)
Grammar is the formal production rules describing the construction of syntax elements.
语法就是一系列产生规则,它描述了语法元素是怎样构建的。如何表示规则呢,举例来说:
<program>-><head><body>
语法系统分为三个部分:
- 顶级元素(top element or identified symbol)–核心内容,是系统开始标志,如上面的
<program>
,通常用大写字母S表示 - 中间元素 (middle elment)–即非终端元素(Non–terminal),又表示为
Vt
,就是除了顶级元素以外还能推导的元素,一般用大写字母表示。 - 末端元素(finest element)–即终结符(Terminal Symbol),用小写字母表示,差不多可以理解成字母表Σ\Sigma
举例:
S->ABC
A->aA|ϵ\epsilon
B->bB|ϵ\epsilon
C->cC|ϵ\epsilon
(ϵ\epsilon表示空)
这里表示的就是类似于a...ab...bc...c
这样的语言,a、b、c可以有0个也可以有多个。即句型(Seutentialform)是
S+ => ai bj ck of Σ\Sigma*的子集。
综上所述,语法可以描述为 G(Σ\Sigma, VN, S, P)(其中Σ\Sigma也可以表述成是VT)
- Σ\Sigma: 字母表或终结符
- VN:中间元素
- S:开始元素(顶级元素)
- P : (production rules) 产生规则
(b)推导(Derivation)
The process that starts from the Start Symbol, and derives a sentence by replacing the left-side with right side in a production rule.
从开始符号(S)开始,根据产生规则将左边的元素替换为右边的元素的过程叫做推导。
- 左推导:一直替换左边第一个非终端元素
右推导:一直替换右边第一个非终端元素
(这里的左边和右边不是‘->’的左边和右边,而是‘->’右边式子的左边和右边)
左推导示例:
S=>ABC=>aABC=>aBC=>abBC=>abbBC=>abbC=>abb
(c)归纳(Reduction)
Reduction is the inverse process of derivation,that is, starting from a given sentence of a language, arriving at the Start Symbol by replacing the right-side with left-side of the production rules finally.
Leftmost(Rightmost) Reduction is the inverse process of Rightmost(Leftmost) derivation.
归纳是推导的逆过程,推导是将语法推导成语言,而归纳是将语言归纳为语法。
还用上面的规则为例:
bbc=>bbcC=>bbC=>bbBC=>bBC=>BC=>ABC=>S
(d)语法规则的递归定义(Recursive definition of grammar rules)
从上面其实就能看出来了,对于像A->aA
这样的定义就已经在递归了,但是光是这样是不行的,递归需要终止条件,所以是 A->aA|ϵ\epsilon
A non-terminal symbol is included in the definition of the non-terminal symbol.
(e)一些符号
- () ——Extract factor 示例:U->a(x|y|z)
- {} ——Assignment of repeat number 表示重复0到正无穷大次 A->B{C|D}
- [] ——Optional symbol 方括号内的内容可选
<Integer>->[+|-]<Digit>{<Digit>}
2、形式化定义
(a)语法定义
grammar G is defined as a quadruple (VN,VT,P,S)
就是之前说的G(Σ\Sigma, VN, S, P)
(b)语法分类
语法分为四类,它们分别是0类,1类,2类, 3类。(真的就是这么叫的)
- 0类:0-type grammar (Phrase grammar or grammar without limitation)
就是没啥限制的语法To any production α\alpha->β\beta in P where α∈\alpha\inV+ and β∈\beta\inV*, there is at least a non-terminal symbol in α\alpha.
意思就是每个产生规则的左边至少要有一个非终端元素。
- 1类:1-type grammar(context-sensitive grammar or length-added grammar)
上下文相关语法To any production α\alpha->β\beta in P,there is the limitation of |β\beta|>=|α\alpha| except for S ->ϵ\epsilon . If S ->ϵ\epsilon ,S can not appear in the right side of any production.
Or,any production α\alpha->β\beta in P has the form of α\alphaAβ\beta->αγβ\alpha\gamma\beta(where α\alpha, β∈\beta\inV* ,A ∈\inVN,γ∈\gamma\inV+) except for S ->ϵ\epsilon.
第一种表述的意思是右边元素的数量要比左边大,另一种表述是前面是α\alpha,后面是β\beta的时候,中间的非终端元素能推导出一个非空元素,这两种表述是等价的。
在这一类语法中,我们在替换左边的非终端元素的时候还要考虑前面和后面,所以叫做上下文相关语法。
2类:2-type grammar(Context-free grammar)
上下文无关语法Every production in P is of the form A->β\beta where A->VN , β∈\beta\inV*.
左边是非终端元素,右边只要是闭包的元素就行了(就是VT,VN,ϵ\epsilon都可以),这样是上下文无关的。3类:3-type grammar(Regular grammar, right-linear grammar or left-linear grammar)
正则语法,分为左线性和右线性。Every production in P is of the form A-> α\alpha B, A-> α\alpha (left-linear),or A-> Bα\alpha, A-> α\alpha(right-linear), where A,B∈\inVN,α∈\alpha\inVT*。
这种语法可以定义单词,比如说A-> α\alpha B, A-> α\alpha,意思是A既可以表示一个字母,也可以表示一个字母再加上另一个非终端元素B,而B除了表示b以外可以表示b再加上一个非终端元素C。
要注意的是语法要么是左线性要么是右线性,不可以一会左一会右。
- 补充:嵌入式语法:第二类减去第三类
2类:A->α\alpha, 3类: A-> α\alpha B| α\alpha
表示的是α\alpha Bγ\gamma这种既不是左线性又不是右线性的还像是第三类的情况。
语言(Language)和语法(Syntax)简述相关推荐
- 再试译ScottGu's Posts 之 VS2008之语言特性--查询语法--New Orcas Language Feature: Query Syntax...
学习一门新的语言,总要从其语法学起.为了方便大家学习,同时也为了自己学习,就将ScottGu的这篇关于3.5中增加的新的特性帖子译了出来.这次我翻译采用中汉对照的方式,不然像上次译的那个那样的话不但我 ...
- 第2讲:SQL语言的通用语法及分类
SQL语言的通用语法及分类 文章目录 SQL语言的通用语法及分类 1.SQL语言的通用语法格式 2.SQL语言的几种分类 1.SQL语言的通用语法格式 2.SQL语言的几种分类 1.SQL语言的通用语 ...
- R语言switch语句语法、实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题
R语言switch语句语法.实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题 目录
- Xamarin XAML语言教程基础语法篇大学霸
Xamarin XAML语言教程基础语法篇大学霸 前 言 Xamarin是一个跨平台开发框架.它可以用来开发iOS.Android.Windows Phone和Mac的应用程序.使用Xamarin框 ...
- c语言函数大全语法下载,C语言函数大全(语法).doc
C语言函数大全(语法) 函数名: abort功 能: 异常终止一个进程用 法: void abort(void);程序例:#include #include int main(void) { prin ...
- python基础编码规范_Python语言的基本语法和编码规范.doc
Python 语言的基本语法和编码规范 Python 编程教程教师 : 工作 :Python 语言的基本语法和编码标 准课程描述本章将介绍 Python 语言的基本语法和编码标准,重点介 绍 Pyth ...
- python语法与java语法的区别_Python语言与java语法的异同之处
本文主要向大家介绍了Python语言与java语法的异同之处,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.变量 java中定义变量,int a=0;而python中为 a= ...
- FPGA笔记之verilog语言(基础语法篇)
文章目录 FPGA笔记之verilog语言(基础语法篇) 1. verilog 的基础结构 1.1 verilog设计的基本单元--module 1.2 module的使用 1.3 I/O的说明 1. ...
- 关于C语言的基本语法知识
由" Hello World "这样一个基本代码,我了解了一些C语言的基础语法知识,接下来是我对其的粗略理解. 首先,我了解到了每一个C语言代码都有一个起始入口,它便是主函数 ma ...
- Go语言学习二 语言结构 基础语法 数据类型
Go 语言结构 由 youj 创建, 最后一次修改 2015-09-08 Go 语言结构 在我们开始学习 GO 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构. Go Hello ...
最新文章
- 今晚直播 | 谷歌资深工程师手把手教你使用TensorFlow最新API构建学习模型
- 分辨5线单极性步进电机接头
- 【推荐系统(二)】协同过滤之隐语义模型(LFM)
- c语言面试题东软,2012东软笔试题
- Mysql 忘记密码重置教程
- 谷歌浏览器怎么设置字体 chrome默认字体设置方法
- SAS在金融中的应用一
- JDK 9 中有哪些 jmod 文件?
- CUDA学习(三)之使用GPU进行两个数相加
- 项不会计算为接受 0 个参数的函数_玩转excel函数:详解四种计数函数,从基础到提高...
- 图书管理系统基于MYSQL
- 百度的实时搜索架构分析
- 两直线夹角求解-Python编程实现
- 视觉尺寸测量设备系统
- 计算机网络水平子系统布线图,综合布线七大子系统构成图
- Coding and Paper Letter(四十二)
- 视频文件格式扩展名/专用名词详解
- Java全套课程修炼之Java小白入门篇
- 《简明python教程》笔记一
- 一名学生A希望访问网站www.google.com。学生A在其浏览器中输入http://www.google.com并按回车.....
热门文章
- 像追女神一样学好java~
- 源码分析学习记录(11)——半边结构
- python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化(异步图书出品)》([美]Al Sweigart(斯维加特))【摘要 书评 试读】- 京东图书...
- tmux鼠标配置出现错误unknown option: mode-mouse
- Java图像处理(后面会补充PS啥的)
- Lenovo(IBM) 使用BoMC工具制作微码升级U盘刷新System x系列
- Windows 10系统时间显示不正确
- 力扣:17. 电话号码的字母组合
- 有关Unity3D的OnRenderImage()和Blit()的一些问题
- deepin v20显卡问题wifi网速慢cpu高频率发热(2021-1-23更新)