语言(Language)和语法(Syntax)简述
来源:互联网 发布:网络伤感歌曲打包下载 编辑:程序博客网 时间:2024/04/30 22:57
- 语言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),用小写字母表示,差不多可以理解成字母表
Σ
举例:
S->ABC
A->aA|ϵ
B->bB|ϵ
C->cC|ϵ
(ϵ 表示空)
这里表示的就是类似于a...ab...bc...c
这样的语言,a、b、c可以有0个也可以有多个。即句型(Seutentialform)是
S+ => ai bj ck of
综上所述,语法可以描述为 G(
Σ : 字母表或终结符- 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|
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(
(b)语法分类
语法分为四类,它们分别是0类,1类,2类, 3类。(真的就是这么叫的)
- 0类:0-type grammar (Phrase grammar or grammar without limitation)
就是没啥限制的语法To any production
α ->β in P whereα∈ V+ andβ∈ V*, there is at least a non-terminal symbol inα .
意思就是每个产生规则的左边至少要有一个非终端元素。
- 1类:1-type grammar(context-sensitive grammar or length-added grammar)
上下文相关语法To any production
α ->β in P,there is the limitation of |β |>=|α | except for S ->ϵ . If S ->ϵ ,S can not appear in the right side of any production.
Or,any productionα ->β in P has the form ofα Aβ ->αγβ (whereα ,β∈ V* ,A∈ VN,γ∈ V+) except for S ->ϵ .
第一种表述的意思是右边元素的数量要比左边大,另一种表述是前面是α ,后面是β 的时候,中间的非终端元素能推导出一个非空元素,这两种表述是等价的。
在这一类语法中,我们在替换左边的非终端元素的时候还要考虑前面和后面,所以叫做上下文相关语法。
2类:2-type grammar(Context-free grammar)
上下文无关语法Every production in P is of the form A->
β where A->VN ,β∈ V*.
左边是非终端元素,右边只要是闭包的元素就行了(就是VT,VN,ϵ 都可以),这样是上下文无关的。3类:3-type grammar(Regular grammar, right-linear grammar or left-linear grammar)
正则语法,分为左线性和右线性。Every production in P is of the form A->
α B, A->α (left-linear),or A-> Bα , A->α (right-linear), where A,B∈ VN,α∈ VT*。
这种语法可以定义单词,比如说A->
要注意的是语法要么是左线性要么是右线性,不可以一会左一会右。
- 补充:嵌入式语法:第二类减去第三类
2类:A->α , 3类: A->α B|α
表示的是α Bγ 这种既不是左线性又不是右线性的还像是第三类的情况。
- 语言(Language)和语法(Syntax)简述
- XML(Extensible Markup Language 可扩展的标记语言)简述及读取
- OpenCyc:CycL Syntax(CycL语法)
- 抽象语法树(Abstract Syntax Tree)
- clisp 记录:2. 语法(Syntax)
- PHP 语言结构(Language constructs)和函数的区别
- PHP 语言结构(Language constructs)和函数的区别
- PHP 语言结构(Language constructs)和函数的区别
- PHP 语言结构(Language constructs)和函数的区别
- PHP 语言结构(Language constructs)和函数的区别
- 绘制语言(Shading Language)
- 着色语言(Shader Language)
- 语言模型(Language model)
- VHDL语言(language)学习
- 着色语言(Shader Language)
- 语言模型(Language Modeling)”
- ESQL(Entity SQL language )语法详解
- Hive语法简述(基础部分)
- 为什么安装了证书,却不能用,有时候钥匙串里也没有安装成功?
- phpExcel导出excel打不开问题
- Lightoj 1203
- OSVR接入HMD设备
- 第二周项目0——宣告“主权”
- 语言(Language)和语法(Syntax)简述
- 2016.9.3初中部上午NOIP普及组比赛总结
- 对于链表,栈,队列,树函数参数的理解(未完)
- Hadoop与Spark常用配置参数总结
- 利用SSH隧道技术实现跳板机SHELL登陆以及SFTP到内网服务器
- iOS-GCD学习之Group
- win7安装 Python numpy 模块
- 公历1984年2月3日23时什么时候能嫁出去
- apt-get, sudo以及git基础