编译原理语法分析.pptxVIP

  • 1
  • 0
  • 约2.72千字
  • 约 21页
  • 2022-11-02 发布于上海
  • 举报
编译原理语法分析PPT课件会计学第1页/共21页4.4.4 算符优先分析算法的设计 这是因为在算符优先文法中,仅在终结符号之间定义优先关系而未对非终结符定义优先关系,从而无法使用优先关系表去识别由单个非终结符组成的可归约串,这也就是说,算符优先分析法不是用句柄来刻画可归约串,而是用最左素短语来刻画可归约串的。第2页/共21页4.4.4 算符优先分析算法的设计1. 最左素短语 所谓句型的素短语是指这样一种短语,它至少包含一个终结符,并且除自身之外,不再包含其它的素短语。句型最左边的素短语称最左素短语。第3页/共21页4.4.4 算符优先分析算法的设计 例如,有文法 G [E] E → E + T | T T → T * F | F F → (E) | id 求该文法句型T + T * F + id的素短语和最左素短语。 首先给出句型T+T *F + id的语法树,见 下图: E +TE + T F T T * F id第4页/共21页4.4.4 算符优先分析算法的设计E其短语有: T + T*F + id T+T*F T T*F id由素短语定义可知T*F和id是素短语。 T*F为最左素短语。 注意:T是该句型的句柄,而不是素短语。 第5页/共21页4.4.4 算符优先分析算法的设计2. 识别句型最左素短语的方法 由算符文法的定义可知,算符优先文法的任何句型都没有相邻的两个非终结符。其句型总可以表示成:$ N1a1 N2a2 … Nnan Nn+1$ 其中每个Ni为非终结符或空, ai为终结符(1≤i≤n). ==..ai-1 ai.ai ai+1, … , aj-1 ajaj aj+1第6页/共21页4.4.4 算符优先分析算法的设计 对算符优先文法G有如下定理: 一个算符优先文法G的任何句型的最左素短语是满足下列条件的最左子串:Ni ai Ni+1 ai+1 … aj Nj+1 第7页/共21页6.3.3 算符优先分析算法的设计 需要指出的是出现在ai左端的非终结符Ni和aj右端的非终结符Nj+1是属于素短语的。 这是由于算符文法的任何句型中终结符和非终结符相邻时含终结符的短语必含相邻非终结符。 ....ai ai+1, … , aj-1 aj因有 $ +* + $aj aj+1. ==..ai-1 ai.第8页/共21页4.4.4 算符优先分析算法的设计 对上述句型 $ T+T*F+id $ 写成算符优先分析形式为:$ N1a1N2a2N3a3a4$ 故由最左素短语定理有N2a2N3 即T*F 是 最左素短语。 第9页/共21页4.4.4 算符优先分析算法的设计3. 算符优先分析程序的设计 根据最左素短语的定理,最左素短语中的终结符号具有相同的优先关系,并且,由于最左素短语中的符号是当时最先要归约的串,其优先关系先于最左素短语之外的符号,所以我们使用一个用于存放文法符号的先进后出栈,并利用优先关系表,可以确定最左素短语是否已形成来决定分析器的动作。 .=. ajaj+1. ai-1ai...??ti+1tn$..==aiai … aj-1aj第10页/共21页4.4.4 算符优先分析算法的设计3. 算符优先分析程序的设计基本思想:优先关系符号栈???t3tj+1t1t2titj$头尾最左素短语返回图第11页/共21页4.4.4 算符优先分析算法的设计下面给出算符优先分析算法。 输入:输入符号串W和优先关系表。 输出:若W是正确的句子,则接收, 否则输出错误信息。 方法:执行下图算法。栈置初值 K ?1, S[K] ? ‘$’当前输入符号读入a.S[K]是终结符?NY.S[K] ? aK ? K+1= j ? K–1j ? K YNS[ j ]a ? 或 S[ j ]a ?S[ j ] a ?YNQ ? S[ j ] , j ? j-1Nj ? j-1S[ j ]是终结符?errorYN K=2 且 a =‘$’?S[ j ] Q?.Y...S[ j+1]······S[K]是最左素短语K ?j+1 , S[K] ? N结束NY第12页/共21页见符号栈说明:算法中K为符号栈S的指针,a用来存放当前输入符号,j是栈的查找指针,Q是工作单元。第13页/共21页4.4.4 算符优先分析算法的设计例如,对表达式的文法 E → E + T | T T → T * F | F F → (E) | id 对输入串id +id $的算符优先分析过程如下表所示。...............==...............第14页/共21页4.4.4

文档评论(0)

1亿VIP精品文档

相关文档