编译原理(清华大学出版社)-- 文法和语言 -- 上下文无关文法及其语法树
例2.6 文法G=({E},{+,*,i,(,)},P,E),其中P为: E→i E→E + E E→E * E E→(E) 这里非终结符E表示一类算术表达式,i 表示程序设计语言中的变量,该文法定义了(描述了)由变量、+、*、(和)组成的算术表达式的语法结构 即: 变量是算术表达式,若E 1 和E 2 是算术表达式,则 E 1 + E 2、 E 1 * E 2 和(E 1 )也是算术表达式 描述一种简单赋值语句的产生式为:(赋值语句)→i := E 描述条件语句的文法片段为 <条件语句>→if<条件>then<语句>| if<条件>then<语句>else<语句> 语法树(推导树) 给定文法G=(V N ,V T ,P,S),对于G的任何句型都能构造与之关联的语法树(推导树),这棵树满足以下4个条件 每个结点都有一个标记, 此标记是V的一个符号 根的标记是S 若一个结点n至少有一个它自己除外的子孙,并且有标记A,则A肯定在V N 中 如果结点n的直接子孙从左到右的次序是结点n 1 ,n 2 ,...,n k ,其标记分别为A 1 ,A 2 ,...,A k ,那么A→A 1 A 2 ...A k 一定是P中的一个产生式 例2.7 G=({S, A}, {a, b}, P, S),其中P为 S→aAS A→SbA A→SS S→a A→ba 上图是G的一棵推导树