教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

编译原理_实验报告(3)

来源:网络收集 时间:2026-09-08
导读: procedure term; begin factor; while sym in [ times, slash ] do begin getsym; factor; end end; 〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’ 〈因子〉的递归子程序实现 procedure factor; be

procedure term;

begin

factor;

while sym in [ times, slash ] do

begin

getsym; factor;

end

end;

〈因子〉∷=〈标识符〉|〈无符号整数〉|‘(’〈表达式〉‘)’

〈因子〉的递归子程序实现

procedure factor;

begin

if sym <> ident then

if sym <> number then

if sym = ‘(‘ then

begin

getsym;

expr;

if sym = ‘)’ then getsym

else error

end

else error

else getsym

else getsym

end;

10

编译原理实验

程序核心代码和注释:

public void analyzer()

{

//***************************

//循环读取grammar.txt

//***************************

/*此处代码略*/

//***************************

//循环读取 lengh.txt

//***************************

/*此处代码略*/

//****************************

// 读入文件,进行语法分析

//

//****************************

string strReadFile;

strReadFile="input.txt";

myTextRead.myStreamReader=new StreamReader(strReadFile);

string strBufferText;

int wid =0;

Console.WriteLine("分析读入程序(记号ID):\n");

do

{

strBufferText =myTextRead.myStreamReader.ReadLine();

if(strBufferText==null)

break;

foreach (String subString in strBufferText.Split())

{

if(subString!="")

{

int ll;

if(subString!=null)

{

ll= subString.Length; //每一个长度

}

else

{

break;

}

int a=ll+1;

char[] b = new char[a];

StringReader sr = new StringReader(subString);

sr.Read(b, 0, ll); //把substring 读到char[]数组里

int sort=(int)b[0];

// word[i] 和 wordNum[i]对应

11

编译原理实验

//先识别出一整个串,再根据开头识别是数字还是字母

Word[wid]=subString;

if(subString.Equals("void"))

{wordNum[wid]=0;}

else

{

if(subString.Equals("main"))

{wordNum[wid]=1;}

else

{

if(subString.Equals("()"))

{wordNum[wid]=2;}

else

{

if(subString.Equals("{"))

{wordNum[wid]=3;}

else

{

if(subString.Equals("int"))

{wordNum[wid]=4;}

else

{

if(subString.Equals("="))

{wordNum[wid]=6;}

else

{

if(subString.Equals("}"))

{wordNum[wid]=22;}

else

{

if(subString.Equals(";"))

{wordNum[wid]=23;}

else //识别变量和数字

{

if(sort>47&sort<58)

{wordNum[wid]=7;}

else

{wordNum[wid]=5;}

}

}

}

}

}

}

}

}

Console.Write(subString+"("+wordNum[wid]+")"+" ");

wid++;

}

}

12

编译原理实验

Console.WriteLine("\n");

}while (strBufferText!=null);

wordNum[wid]=24;

myTextRead.myStreamReader.Close();

//*********************************

//读入LR分析表

//

//***********************************

/*此处代码略*/

int[] state = new int[100];

string[] symbol =new string[100];

state[0]=0;

symbol[0]="#";

int p1=0;

int p2=0;

Console.WriteLine("\n按文法规则归约顺序如下:\n"); //***************

// 归约算法如下所显示

//***************

while(true)

{

int j,k;

j=state[p2];

k=wordNum[p1];

t=LR[j,k]; //当出现t为0的时候

if(t==0)

{

//错误类型

string error;

if(k==0)

error="void";

else

if(k==1)

error="main";

else

if(k==2)

error="()";

else

if(k==3)

error="{";

else

if(k==4)

error="int";

else

if(k==6)

error="=";

else

if(k==22)

error="}";

else

13

编译原理实验

if(k==23)

error=";";

else

error="其他错误符号";

Console.WriteLine("\n检测结果:");

Console.WriteLine("代码中存在语法错误");

Console.WriteLine("错误状况:错误状态编号为 "+j+" 读头下符号为 "+error);

break;

}

else

{

if(t==-100) //-100为达到接受状态

{

Console.WriteLine("\n");

Console.WriteLine("\n检测结果:");

Console.WriteLine("代码通过语法检测");

break;

}

if(t<0&&t!=-100) //归约

{

string m=grammar[-t];

Console.Write(m+" "); //输出开始符

int length=lengh[-t];

p2=p2-(length-1);

Search mySearch=new Search();

int right=mySearch.search(m);

if(right==0)

{

Console.WriteLine("\n");

Console.WriteLine("代码中有语法错误");

break;

}

int a=state[p2-1];

int LRresult= LR[a,right];

state[p2]=LRresult;

symbol[p2]=m;

}

if(t>0)

{

p2=p2+1;

state[p2]=t;

symbol[p2]=Convert.ToString(wordNum[p1]);

p1=p1+1;

}

}

}

myTextRead.myStreamReader.Close();

Console.Read();

}

14

编译原理实验

实验三:语义分析

一、实验目的

给出PL/0文法规范,要求编写PL/0语言的语义分析程序。

二、实验准备

微机CPU主频1.3G以上,128M内存,安装好C语言,PASCAL语言,或C++。

三、实验时间

6学时

四、实验内容

已给PL/0语言文法,条件语句的翻译分析程序设计(输出四元式)

题目: 条件语句的翻译分析程序设计(输出四元式)

初始条件:

理论:学完编译课程,掌握一种计算机高级语言的使用。

实践:计算机实验室提供计算机及软件环境。如果自己有计算机可以在其上进行设计。

要求完成的主要 …… 此处隐藏:3201字,全部文档内容请下载后查看。喜欢就下载吧 ……

编译原理_实验报告(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/110442.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)