• 语言Language和语法Syntax简述

    • 一字母表和字符串
    • 二语法和语言
      • 1几个基本概念

        • a语法Grammer
        • b推导Derivation
        • c归纳Reduction
        • d语法规则的递归定义Recursive definition of grammar rules
        • e一些符号
      • 2形式化定义
        • a语法定义
        • b语法分类

语言(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)简述相关推荐

  1. 再试译ScottGu's Posts 之 VS2008之语言特性--查询语法--New Orcas Language Feature: Query Syntax...

    学习一门新的语言,总要从其语法学起.为了方便大家学习,同时也为了自己学习,就将ScottGu的这篇关于3.5中增加的新的特性帖子译了出来.这次我翻译采用中汉对照的方式,不然像上次译的那个那样的话不但我 ...

  2. 第2讲:SQL语言的通用语法及分类

    SQL语言的通用语法及分类 文章目录 SQL语言的通用语法及分类 1.SQL语言的通用语法格式 2.SQL语言的几种分类 1.SQL语言的通用语法格式 2.SQL语言的几种分类 1.SQL语言的通用语 ...

  3. R语言switch语句语法、实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题

    R语言switch语句语法.实战:Switch语句用来处理嵌套的if else处理起来比较困难或者麻烦的条件判断问题 目录

  4. Xamarin XAML语言教程基础语法篇大学霸

    Xamarin XAML语言教程基础语法篇大学霸 前  言 Xamarin是一个跨平台开发框架.它可以用来开发iOS.Android.Windows Phone和Mac的应用程序.使用Xamarin框 ...

  5. c语言函数大全语法下载,C语言函数大全(语法).doc

    C语言函数大全(语法) 函数名: abort功 能: 异常终止一个进程用 法: void abort(void);程序例:#include #include int main(void) { prin ...

  6. python基础编码规范_Python语言的基本语法和编码规范.doc

    Python 语言的基本语法和编码规范 Python 编程教程教师 : 工作 :Python 语言的基本语法和编码标 准课程描述本章将介绍 Python 语言的基本语法和编码标准,重点介 绍 Pyth ...

  7. python语法与java语法的区别_Python语言与java语法的异同之处

    本文主要向大家介绍了Python语言与java语法的异同之处,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.变量 java中定义变量,int a=0;而python中为 a= ...

  8. FPGA笔记之verilog语言(基础语法篇)

    文章目录 FPGA笔记之verilog语言(基础语法篇) 1. verilog 的基础结构 1.1 verilog设计的基本单元--module 1.2 module的使用 1.3 I/O的说明 1. ...

  9. 关于C语言的基本语法知识

    由" Hello World "这样一个基本代码,我了解了一些C语言的基础语法知识,接下来是我对其的粗略理解. 首先,我了解到了每一个C语言代码都有一个起始入口,它便是主函数 ma ...

  10. Go语言学习二 语言结构 基础语法 数据类型

    Go 语言结构 由 youj 创建, 最后一次修改 2015-09-08 Go 语言结构 在我们开始学习 GO 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构. Go Hello ...

最新文章

  1. 今晚直播 | 谷歌资深工程师手把手教你使用TensorFlow最新API构建学习模型
  2. 分辨5线单极性步进电机接头
  3. 【推荐系统(二)】协同过滤之隐语义模型(LFM)
  4. c语言面试题东软,2012东软笔试题
  5. Mysql 忘记密码重置教程
  6. 谷歌浏览器怎么设置字体 chrome默认字体设置方法
  7. SAS在金融中的应用一
  8. JDK 9 中有哪些 jmod 文件?
  9. CUDA学习(三)之使用GPU进行两个数相加
  10. 项不会计算为接受 0 个参数的函数_玩转excel函数:详解四种计数函数,从基础到提高...
  11. 图书管理系统基于MYSQL
  12. 百度的实时搜索架构分析
  13. 两直线夹角求解-Python编程实现
  14. 视觉尺寸测量设备系统
  15. 计算机网络水平子系统布线图,综合布线七大子系统构成图
  16. Coding and Paper Letter(四十二)
  17. 视频文件格式扩展名/专用名词详解
  18. Java全套课程修炼之Java小白入门篇
  19. 《简明python教程》笔记一
  20. 一名学生A希望访问网站www.google.com。学生A在其浏览器中输入http://www.google.com并按回车.....

热门文章

  1. 像追女神一样学好java~
  2. 源码分析学习记录(11)——半边结构
  3. python编程快速上手自动化_《Python编程快速上手 让繁琐工作自动化(异步图书出品)》([美]Al Sweigart(斯维加特))【摘要 书评 试读】- 京东图书...
  4. tmux鼠标配置出现错误unknown option: mode-mouse
  5. Java图像处理(后面会补充PS啥的)
  6. Lenovo(IBM) 使用BoMC工具制作微码升级U盘刷新System x系列
  7. Windows 10系统时间显示不正确
  8. 力扣:17. 电话号码的字母组合
  9. 有关Unity3D的OnRenderImage()和Blit()的一些问题
  10. deepin v20显卡问题wifi网速慢cpu高频率发热(2021-1-23更新)