- 21
- 0
- 约6.58千字
- 约 39页
- 2018-10-19 发布于山东
- 举报
主要内容
文法及语言的表示及定义
分析过程
分析树与抽象语法树
二义性
文法的扩展表示:EBNF和语法图
TINY语言的语法
• 句型的分析,是指构造一种算法,用以判断所给的
符号串是否为某一文法的句型(或句子)。
• 对于一给定的文法来说,从其开始符号到某一句
型,或从一个句型到另一句型间的推导序列可能不
唯一。
• 例如
G[E]={E→E+T|T,
T→T*F|F,
F→(E)|i },其句型i+i*i有如下的推导序
列:
• 最左(右)推导,是指对于一个推导序列中的每一
直接推导,被替换的总是当前符号串中的最左
(右)非终结符。最右推导称为规范推导。
• 上例序列一、序列二就分别为最左推导和最右推
导。
• 推导的逆过程称为为归约。规范推导的逆过程称为
为规范归约。
• 语法分析——句子分析——如何存储分析过程?
• 句子的组成——BNF规则——递归
分析过程是递归的
使用递归的树形结构(分析树)来存储分析过程
• 分析输出也可以是中间代码甚至目标代码。一般假
定分析的输出为直观、形象的分析树,在此基础上
加上相应语义分析,便得到真正的中间代码或目标
代码。
• 文法G= (VN ,VT ,P,S )下的分析树具有以下
特征:
根结点标记为文法的开始符号S;
每个节点上的标记都是V=VNVT 中的一个符号;
如果一棵子树的根标记为A ,且其所有直接后代节
点从左向右排列的顺序为A A ,…A ,那么
1 2 k
A→A ,A ,…A 是P中的一个产生式;
1 2 k
如果T1是根节点的唯一子树,且其标记为,则有S
→在P中;
• 如果树的所有端末节点(叶子)上的标记从左向右
排列为字符串w ,则w是G的句型,若w 中仅含终结
符,则它为G所产生的句子。
• 对于一个给定的文法和一个句型,如何构造一棵与
该句型推导相应的分析树?
• 现以文法G[E]={E→E+T|T,T→T*F|F,F→(E)|i }和句
型i+i*i来说明分析树的构造步骤。
由于句型i+i*i一个推导为:
EE+TT+TF+Ti+Ti+T*Fi+F*Fi+i*F
i+i*i
则分析树的构造过程如下:以开始符号E作为分析
树的根结点,对于第一个推导EE+T,则可以画
出三个分支,分支的标记从左到右分别为E、+、
T,即得到取代E的符号串E+T;从将被替换的E出
发,向下画分支,。
• 文法G的句型
• 短语:子树的末端结点(叶子)形成的符号串(相
对于子树的根)。
• 简单短语:只有父子两代的子树的末端结点(叶
子)形成的符号串。
• 句柄:最左的简单短语。
• 总结:
(1)优点:分析树(parse tree)反映推导的全
程,信息齐全。
(2 )缺点:太复杂、耗时
(3 )解决办法:压缩存储对后续阶段有用的信息
例子:
exp →exp op exp | (exp) | number
op →+ | - | *
符号串(number - number)*number和表示式
(34-3 )*42 的分析树?
语法树
• 特点:分析树表示所有推导步骤;语法树只保留对
后续分析有用的信息,无法还原记号序列,但效率
更高。
• 算术表达式对应抽象语法树的C数据类型说明:
typedef enum {Plus, Minus, Times} OpKind;
typedef enum {OpKind, ConstKind} ExpKind;
typedef struct streenode
{ ExpKind kind;
OpKind op;//可用union将kind和op合一以节省空间。
struct streenode * lchild, *rchild;
i
原创力文档

文档评论(0)