第一范文网 - 专业文章范例文档资料分享平台

编译原理实验指导

来源:用户分享 时间:2025/6/8 11:10:17 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

② 若X是终结符,并且X和t.code相等,表示期望的终结符号和输入符号相等。让X出stack栈,并输入下一个单词二元式。 ③ 若X是非终结符,则查预测分析表。若M[X][t.code]存放着关于X的一个产生式,那么,让X出stack栈,然后把产生式右部符号串按反序一一推进stack栈。若右部符号串为空字ε,则意味着无任何文法符号进栈。 实验步骤:

(1)熟悉习教材关于预测分析法的原理。

(2)依照教材关于基于预测分析的语法分析算法,使用C/C++语言实现该算法。

(3)调试、编译、运行程序。 实验要求:

在下次实验时提交本次实验的实验报告(实验报告包括实验目的、实验内容、实验实现过程、源程序、实验结果、实验体会)。

15

实现代码:

void LL1() {

struct code_val {

Char code; char var[20]; }t;

ifstream cinf(“lex_r.txt”,ios::in);

char stack[20]={?#?,?S?}; char X; int top=1; cinf>>t.code>>t.val; while(1) do {

x=stack[top--]; switch(X) of { case ?#?:

if(x==t.code) {

cout>>”Acc”; break; }

case X∈VT:

if(X= =t.code) {

cout>>t.code>>t.val; }

case X∈VN:

if(M[X][t.code]=X→X1X2?Xk) { X1X2?Xk按反序进栈; top=top+k; } } }

}

16

实验五 LR语法分析

实验学时:2学时 实验目的:

掌握

LR语法分析的基本原理

基本原理:把每个句柄的识别(产生式右部的符号串)过程划分为若干状态,每个状态只识别句柄的一个符号,若干个状态就可识别句柄左端的一部分符号。

利用高级语言实现LR语法分析器 实验内容: 文法:(0)S→E

(1)E→E+T (2)E→T (3)T→T*F (4)T→F (5)F→(E) (6)F →i

假设分析表用二维数组M存储,栈顶状态用Stop表示,当前输入符号用t.code表示,控制程序的算法可归纳如下:

(1) 移进。若M[Stop][t.code]=sj,说明句柄尚未完成,应执行移进

操作。S表示移进,j为状态号,将j移入状态栈,将t.code移入符号栈,j成为新的栈顶状态Stop。读下一个单词。

17

(2) 归约。若M[Stop][t.code]=rk,说明句柄已出现在栈顶,应该用

编号为k的产生式A→B进行归约。假设LEN(β)=r,M[Stop-r][t.code]=j。首先将栈顶r个元素出栈,然后将j和A分别移入状态栈和符号栈,j成为新的栈顶状态Stop。当前处理单词不变。

(3) 接受。M[Stop][t.code]=Acc,表示输入串是一个合法句子,程

序终止运行。

(4) 出错。M[Stop][t.code]=空白,表示出错,最简单处理为程序终

止运行。

18

搜索更多关于: 编译原理实验指导 的文档
编译原理实验指导.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c9ssde53y9f3j4le875rd_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top