语言(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)(其中 Σ 也可以表述成是VT)
- Σ : 字母表或终结符
- 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( Σ , VN, S, P)
(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->
α
B, A->
α
,意思是A既可以表示一个字母,也可以表示一个字母再加上另一个非终端元素B,而B除了表示b以外可以表示b再加上一个非终端元素C。
要注意的是语法要么是左线性要么是右线性,不可以一会左一会右。
- 补充:嵌入式语法:第二类减去第三类
2类:A-> α , 3类: A-> α B| α
表示的是 α B γ 这种既不是左线性又不是右线性的还像是第三类的情况。
本文简要介绍了语言和语法的基本概念,包括字母表和字符串的定义,以及语法的组成部分如推导、归纳和递归定义。通过形式化定义阐述了语法的分类,如0类、1类、2类(上下文无关语法)和3类(正则语法)。
和语法(Syntax)简述&spm=1001.2101.3001.5002&articleId=52442584&d=1&t=3&u=30ac895de2834b78883a271f8be3ff43)
925

被折叠的 条评论
为什么被折叠?



