编译原理-文法

时间:2021-03-02 03:55:16

文法G定义为四元组(VN,VT,P,S ),其中 VN为非终结符号(或语法实体,或变量)集; VT为终结符号集; P为产生式(也称规则)的集合; S称作识别符号或开始符号,它是一个非终结符,至少要在一条产生式中作为左部出现。 VN,VT和P是非空有穷集。 VN和VT不含公共的元素,即VN ∩ VT = φ 用V表示VN ∪ VT ,称为文法G的字母表或字汇表

 

规则(重写规则、产生式或生成式)是形如α→β或α∷=β的(α,β)有序对,其中α是字母表V的正闭包V+中的一个符号,β是V*中的一个符号。α称为规则的左部,β称作规则的右部。 例如 文法G=(VN,VT,P,S) VN = { S }, VT ={ 0, 1 } P={ S→0S1, S→01 }, S为开始符号 再如: 文法G=(VN,VT,P,S) VN ={<标识符>,<字母>,<数字>} VT ={a,b,c,…x,y,z,0,1,…,9} P={<标识符>→<字母> <标识符>→<标识符><字母> <标识符>→<标识符><数字> <字母>→a,…, <字母>→z <数字>→0,…, <数字>→9 } S=<标识符>

 

 最通俗的例子:  
  G=(Vt,Vn,S,P)  
  其中:  
  Vt={张三,李四,愉快地,高兴的,吃饭,游泳}  
  Vn={句子,主语,谓语,状语}  
  S={句子}  
  P:  
      句子-->主语谓语  
      句子-->主语状语谓语  
      主语-->张三|李四  
      谓语-->吃饭|游泳  
      状语-->愉快地|高兴地  
  那么:  
      "张三吃饭"           是正确的句子  
      "张三李四游泳"   不是正确的句子   

 

本例子引自confu的博客

 

 

推荐一个网上的学习地址:http://www.xinx.sdnu.edu.cn/sfzx/jpsykc/lfa/Chap03.html#(1)

 

补充多一个:http://www.cnblogs.com/6DAN_HUST/archive/2008/12/24/1361553.html(本人觉得第二个讲得比较易懂,不过最好结合起来看)