编译原理-语法分析

本文详细探讨了语法分析在编译器设计中的重要性,包括语法分析的双重含义、上下文无关文法、自上而下分析(递归下降与预测分析)以及自下而上的LR分析法。重点介绍了消除左递归、提取左因子等方法,旨在帮助读者深入理解编译原理中的语法分析过程。
摘要由CSDN通过智能技术生成

语法分析的双重含义:

  1. 语法规则:上下文无关文法(子集:LL文法或LR文法)
  2. 语法分析:下推自动机(LL或LR分析器)、自上而下分析、自下而上分析
一、语法分析的若干问题

许多编译器,特别是由自动生成工具构造的编译器,往往其前端的中心部件就是语法分析器

(1)语法分析器的作用

根据词法分析器提供的记号流,为语法正确的输入构造分析树(或语法树)
检查输入中的语法(可能包括词法)错误,并调用出错处理器进行适
当处理。
在这里插入图片描述
(2)语法错误的处理原则
源程序中可能出现的错误:语法(包括词法)错误语义错误(静态语义错误和动态语义错误)

词法错误:指非法字符或拼写错关键字、标识符等
语法错误:指语法结构出错,如少分号、括号不匹配、begin/end不配对等
静态语义错误:如类型不一致、参数不匹配等
动态语义错误(逻辑错误):如死循环、变量为零时作除数等


二、上下文无关文法(CFG)/2型文法
CFG是一个四元组G =(N,T,P,S),其中
(1) N是非终结符(Nonterminals)的有限集合;
(2) T是终结符(Terminals)的有限集合,且N∩T=Φ;
(3) P是产生式(Productions)的有限集合,A→α,其中A∈N(左部),α∈(N∪T)*(右部),若α=ε,则称A→ε为空产生式(也可以记为A →);4) S是非终结符,称为文法的开始符号(Start symbol)
 注: S ∈ N , N可以出现在产生式左边和右边,**T绝不出现在产生式左边**.

三、自上而下语法分析:递归下降分析法、预测分析法

基本思想:对任何一个输入序列ω,从S开始进行最左推导直到得到一个合法的句子或发现一个非法结构。整个自上而下分析是一个试探的过程,是反复使用不同产生式谋求与输入序列匹配的过程。

提前准备-重写文法

  1. 消除左递归,以避免陷入死循环;
  2. 提取左因子,以避免回溯.
(1)消除左递归

定义:若文法G中的非终结符A,对某个文法符号序列α存在推导A =+> Aα,则称G是左递归的。若G中有形如A→Aα的产生式,则称该产生式对A直接左递归

<1> 消除文法的直接左递归:把左递归转换为右递归

在这里插入图片描述在这里插入图片描述

<2> 消除文法的间接左递归

核心思想:将无直接左递归的非终结符展开到其他产生式,然后消除其他产生式中的直接左递归(如果有的话

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值