第3章 80X86微处理器.pdfVIP

  • 2
  • 0
  • 约7.36万字
  • 发布于河北
  • 举报
  • 文档已下架,其它文档更精彩

第M章充力的微处理器

3.1语法分析的若干问题

3.2上下文无关文法(ContextFreeGrammar,CFG)

3.3语言与文法简介

3.4自上而下语法分析

3.5自下而上语法分析

3.6本章小结

第M章充”够微处理器

/辛二日一^a~d—金―aja,^a:二在二点二

3.180x86微处理器简介

3.1.1语法分析器的作用

语法分析器是编译器前端的重要组成部分,许多编译器,特

别是由自动生成工具构造的编译器,往往其前端的中心部件就是

语法分析器。语法分析器在编译器中的位置和作用如图3.1所示,

它的主要作用有两点:

(1)根据词法分析器提供的记号流,为语法正确的输入构造分

析树(或语法树)。这是本章的重点,在以后各节中详细讨论;

(2)检查输入中的语法(可能包括词法)错误,并调用出错处理

器进行适当处理。下边简单介绍语法错误处理的基本原则,而在

以后的讨论中忽略此日里一一一*七

0

*T金金—,士

图3.1语法分析器在编译器中的位置与作用

第M章路器微处理器

/辛二日一^a~d—金―aja,^a:二在二点二

3.1.2语法错误的处理原则™

1.源程序中可能出现的错误

源程序中可能出现的错误可以分为两类:语法错误和语义错误

其中,语法错误又包括词法错误和语法错误。词法错误指出现非

法字符或关键字、标识符拼写错误等;语法错误是指语法结构出

错,如少分号、begin/end不配对等。语义错误包括静态语义错误

和动态语义错误。静态语义错误涉及的是编译时可检查出来的错

误,如类型不一致、参数不匹配等;动态语义错误一般是指程序

运行时的逻辑错误,如无穷递归、变量为零时作除数等。

大多数错误的诊断和恢复集中在语法分析阶段,一个原因是大

多数错误是语法错误,另一个原因是语法分析方法的准确性,它

们能以非常有效的笆诊断语法错误。在编译的鳖,想要准确

地诊断语义或逻辑错误有时是很困难的一一一^tfc

2.语法错误处理的目标

对语法错误的处理,一般希望达到以下基本目标:

①清楚而准确地报告错误的出现,地点正确、不漏报、不错

报也不多报;

②迅速地从每个错误中恢复过来,以便分析继续进行;

③对语法正确源程序的分析速度不应降低太多。

这些目标看起来容易,但是实现起来并不简单。幸好常见的

错误是简单的,直接了当的出错处理机制一般就足以应付。但有

些时候,错误的实际位置远远前于发现它的位置,并且这种错误

的准确性也难以推断。在某些场合,出错处理程序可能需要猜测

程序员的本意。

有些分析方法,如LL和LR方法,可以尽可能快地检测语法

错误。更准确地说,它们具有“活前缀”(viable-prefixproperty)

性质,这指的是,它们一看见输入的前缀不是该语言任何串的前

缀时,就能报告错误。出错处理的关键是如何从错误中恢复,使

分析可以进行下去,而不是遇到第一个错误就停止分析。

第3章充”器微处理器

三4■金N1二W—金—金可三L4』[3^口二JT2在二g

3.语法错误的基本恢复策略

若希望编译器的语法分析方式是每次对输入源程序完整地扫描

一遍,而不是遇到第一个语法错误就停止的话,就需要采取某种

恢复策略,使得分析在遇到错误时还能够继续进行。以下是一些

可能的恢复策略。

(1)紧急方式恢复(Panic-moderecovery):这是最简单的方法,

适用于大多数分析方法。发现错误时,分析器每次抛弃一个输入

记号,一直向前搜索,直到输入记号属于某个指定的合法记号(称

为同步记号)集合为止。同步记号一般是定界符,如分号或end等,

它们在源程序中的作用很清楚。当然,设计编译器时必须选择适

当的同步记号。这种处理方法最简

文档评论(0)

1亿VIP精品文档

相关文档