语言(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语法分类

语言(Language)和语法(Syntax)简述

什么是语法?如何表示一种语言的语法?如何验证语言是否符合语法?怎样归纳语言的语法特征?……在正式学习编译原理之前,我们需要对这些概念有一定的认识。
语言有语法(syntax)、语义(semantics)和语用(pragamatics),符合语法则称为合法的(legal),语义正确则是合理的(rational),语用描述的是语言的多义性。分析(Analyse)指的是语法和语义的分析。

一、字母表和字符串

如果令A表示字母表,A0表示空字符串,A1表示由一个字符表示的单词,我们可以这样表示一个单词:
closure
也就是一个单词可以由n个字符组成,A*就是在字母表A基础上所有字符串的闭包,我们就可以用(A*)*表示由单词组成的句子。
positive
把空字符串去掉后,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,BVNαVT*。

这种语法可以定义单词,比如说A-> α B, A-> α,意思是A既可以表示一个字母,也可以表示一个字母再加上另一个非终端元素B,而B除了表示b以外可以表示b再加上一个非终端元素C。
要注意的是语法要么是左线性要么是右线性,不可以一会左一会右。

  • 补充:嵌入式语法:第二类减去第三类
    2类:A->α, 3类: A-> α B| α
    表示的是α Bγ这种既不是左线性又不是右线性的还像是第三类的情况。
4 0
原创粉丝点击