编译原理与技术课语法分析器设计文档.docVIP

  • 3
  • 0
  • 约 8页
  • 2016-11-23 发布于贵州
  • 举报

编译原理与技术课语法分析器设计文档.doc

编译原理与技术课语法分析器设计文档

语法分析实验报告 1. 算数表达式消除左递归之后的文法 E - TE’ E’ - +TE’| -TE’ | ? T - FT’ T’ - *FT’ | /FT’| ? F - id | (E) | num 文法1 其中: id: a-f, A-F num:0-9 2. 本语法分析器采用 3. 功能如下: 进行 windows 8.1操作系统 三、输入输出设计 输入设计 输入算数表达式,以“回车键”结束。 算数表达式的组成为:+、—、*、/、、—f、A—F、0—9、2.输出设计 a.输出预测分析表。表项为产生式的序号(文法1中的顺序),0表示空白,’—‘表示同步信息synch,用于出错处理 b.输出最左推导用到的产生式消左递归后的文法)中的产生式,产生式中的‘ ? ’用‘ ~ ’表示;c.若在分析过程中发现错误,输出对错误的应急式处理。 四、主要数据结构设计 0. FIRST集 FOLLOW集 S Id,(,num $,) S’ ?,+,— ,) Id,(,num $,),+,— ’ ?,*,/ ,),+,— Id,(,num $,),+,—,*,/ {+,-,~, }, {x,(,y, }, {*,~,/, }, {x,(,y, }, {x, }, {y, }}; 注:依次为E、’、’、。 表示 表示num,‘ ~ ’表示 ‘ ? ’。 {$,), }, {$,),+,-, }, {$,),+,-, }, {$,),+,-,*,/, }}; 注:依次为E、’、’、。 表示 表示num,‘ ~ ’表示 ‘ ? ’。 产生式集: {R-TR#}, {R~#}, {TPZ#}, {Z*PZ#}, {Z/PZ#}, {Z~#}, {Px#}, {P(S)#},{Py#}}; 注:‘ ~ ’表示 ‘ ? ’。 7. 栈顶指针top;指向当前符号的指针ip。五、核心算法描述 1. 构造预测分析表 子函数: 算法描述: (文法1的每个产生式α) { for(每个终结符号aFIRST(α)) 把α放入A,a]中; if (?∈FIRST(α)) for(任何bFOLLOW(A)) 把α放入A,b]中; } for(每个非终结符) //添加同步信息synch,表项0为空白, -1为synch for(每个终结符cFOLLOW(A)) if (M[A,c]==0) 令A,c] = -1; 构造分析表的流程图: 2. 预测分析控制程序 主要使用分析栈stack[100],输入缓冲区in_buffer[100],栈顶指针top,指向当前输入符号的指针ip。 算法描述:(伪码描述)将输入的算术表达式存入输入缓冲区,以‘’结束; stack[0] = $;//‘’在栈底 stack[1] =’S’; //开始符号在栈顶 top=1; ip=0; //栈顶指针,当前符号指针初始化 while (X != $) { if(X是终结符) if(X == a) {从栈顶弹出} else {弹出栈顶符号} else //栈顶符号是非终结符 if (M[X,a] != 0 M[X,a] != -1) //表项有产生式X-Y1Y2…YK { 从栈顶弹出 依次将Yk、Yk-1…..Y2、Y1压入栈; X-Y1 Y2….. Yk ; } else //出错处理,//-1表示synch表项,0表示空白表项 { if ((M[X,a] == 0) {跳过输入符号a;} if(M[X,a] ==

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档