文法

王朝百科·作者佚名  2009-12-29
窄屏简体版  字體: |||超大  

【注音】:wén fǎ

【释义】:1.法制;法规。

2.文章的作法。 3.语法。语言的结构方式。包括词的构成和变化﹐词组和句子的组织。

计算机科学中的文法多用在编译程序和语言处理等领域,例如在编译程序中,根据一些指定的规则,来确定编程语言的语法,从而实现编译器的功能。

比如有这样一个文法

E -> T+E | T-E | T

T -> F*T | F/T | F

F -> (E) | i

它可以推导出任何一个算数表达式,例如这样一个表达式(i + i) * i,可以通过如下的文法推到获得:

E => T => F * T => (E) * T => (T + E) * T => (F + E) * T => (i + E) * T => (i + T) * T => (i + F) * T

=> (i + i) * T => (i + i) * F => (i + i) * i

文法的类型

在计算机科学中,文法是编译原理的基础,是描述一门程序设计语言和实现其编译器的方法。文法的描述多用BNF(巴克斯范式),而另一个重要的概念:正则表达式,也是文法的另一种形式。

自从乔姆斯基(Chomsky)于1956年建立形式语言的描述以来,形式语言的理论发展很快。这种理论对计算机科学有着深刻的影响,特别是对程序设计语言的设计、编译方法和计算复杂性等方面更有重大的作用。

乔姆斯基把文法分成四种类型,即0型、1型、2型和3型。这几类文法的差别在于对产生式施加不同的限制。

多数程序设计语言的单词的语法都能用正规文法或3型文法来描述。

3型文法G=(VN,VT,P,S)的P中的规则有两种形式:一种是前面定义的形式,即:A→aB或A→a其中A,B∈VN ,a∈VT*,另一种形式是:A→Ba或A→a,前者称为右线性文法,后者称为左线性文法。正规文法所描述的是VT*上的正规集。

四个文法类的定义是逐渐增加限制的,因此每一种正规文法都是上下文无关的,每一种上下文无关文法都是上下文有关的,而每一种上下文有关文法都是0型文法。称0型文法产生的语言为0型语言。上下文有关文法、上下文无关文法和正规文法产生的语言分别称为上下文有关语言、上

下文无关语言和正规语言。

设G=(VN,VT,P,S),如果它的每个产生式α→β是这样一种结构:α∈( VN∪VT )*且至少含有一个非终结符,而β∈( VN∪VT )*,则G是一个0型文法。

0型文法也称短语文法。一个非常重要的理论结果是,0型文法的能力相当于图灵机(Turing)。或者说,任何0型语言都是递归可枚举的;反之,递归可枚举集必定是一个0型语言。

对0型文法产生式的形式作某些限制,以给出1,2和3型文法的定义。

设G=(VN,VT,P,S)为一文法,若P中的每一个产生式α→β均满足|β|≥|α| ,仅仅S→ε除外,则文法G是1型或上下文有关的。

例4.3的文法是上下文有关的。同样例4.1,例4.2的文法也都是上下文有关的。

在有些文献给的定义中,将上下文有关文法的产生式的形式描述为α1Aα2→α1βα2,其中α1、α2和β都在( VN∪VT

)*中(即在V*中),β≠ε,A在VN中。这种定义与前边的定义等价。但它更能体现"上下文有关"这一术语,因为只有A出现在α1和α2的上下文中,才允许用β取代A。

设G=(VN,VT,P,S),若P中的每一个产生式α→β满足:α是一非终结符,β∈( VN∪VT )*则此文法称为2型的或上下文无关的。有时将2型文法的产生式表示为形如:A→β其中A∈VN,也就是说用β取代非终结符A时,与A所在的上下文无关,因此取名为上下文无关文法。

例4.1和例4.2中的文法都是上下文无关的,下面我们再给出一个例子(例4.4),例中的文法G是上下文无关文法,G的语言是由相同个数的a和b所组成的{a,b}*上的串。

设G=(VN,VT,P,S),若P中的每一个产生式的形式都是A→aB或A→a,其中A和B都是非终结符,a是终结符,则G是3型文法或正规文法。

程序设计语言中的几类单词可用下述规则描述:

〈标识符〉→l|l〈字母数字〉

〈字母数字〉→l|d|l〈字母数字〉|d〈字母数字〉

〈无符号整数〉→d|d〈无符号整数〉

〈运算符〉→+|-|*|/|=|〈〈等号〉|〉〈等号〉……

〈等号〉→=

〈界符〉→,|;|(|)|……

其中l表示a~z中的任何一英文字母,d表示0~9中的任一数字。

关键字(保留字)也是一种单词,一般关键字(保留字)都是由字母构成,它的描述也极容易,实际上,关键字(保留字)集合是标识符集合的子集。

最复杂的一类单词要属无符号实数了,比如25.55e+5和2.1,它们可以由如下规则描述。

例4.6

〈无符号数〉→d〈余留无符号数〉|.〈十进小数〉|e〈指数部分〉

〈余留无符号数〉→d〈余留无符号数〉|.〈十进小数〉|e〈指数部分〉|ε

〈十进小数〉→d〈余留十进小数〉

〈余留十进小数〉→e〈指数部分〉|d〈余留十进小数〉|ε

〈指数部分〉→d〈余留整指数〉|s〈整指数〉

〈整指数〉→d〈余留整指数〉

〈余留整指数〉→d〈余留整指数〉|ε

其中s表示正或负号(+,-),d表示0~9中的任一数字。

例:1型(上下文有关)文法

文法G[S]: S→CDAb→bA

C→aCA Ba→aB

C→bCB Bb→bB

AD→aD C→ε

BD→bD D→ε

Aa→bD

L(G)={ww|w∈{a,b}*}

例:2型(上下文无关)文法

文法G[S]: S→0A|1B|0

A→0A|1B|0S

B→1B|1|0

例:定义标识符的3型(正规)文法

文法G[I]: I → lT

I → l

T → lT

T → dT

T → l

T → d

其中l表示a~z中的任何一英文字母,d表示0~9中的任一数字。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航