• 大小: 2.52MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-09-14
  • 语言: 其他
  • 标签: 编译原理  试卷  

资源简介

编译原理课程实验(常州工学院),比较全的,编译原理试卷

资源截图

代码片段和文件信息

#include 
#include “LL1.H“
#include “stack.h“

/*求first集*/
void GetFirstSet();
/*求所有生成式的first集*/
void GetExpFirstSet();
/*求某一表达式的部分文法符号串的first集*/
void getPartexpFirstSet(int*expSet & head);
/*求Follow集*/
void GetFollowSet();
/*初始化预测表*/
void InitiPreTable();
/*读取token*/
int GetToken();
/*查找符号表,判断表项是否为-1,若不是返回1,若是返回0*/
int Match(int vvint tt);
/*错误信息提示*/
void error();
/*将vvtt所对应的表达式压入栈*/
void PushStr(linkStack*sint vvint tt);
/*打印产生式*/
void PrintStr(int vv int tt);
/*语法分析器主程序*/
void ParseLl1();
/*将宏转化成字符串*/
char* ConvertNumToString(int num);
void main()
{
GetFirstSet();
GetExpFirstSet();
GetFollowSet();
InitiPreTable();
ParseLl1();

};

/*判断num是否在集head中,若存在返回1,若不存在返回0*/
int IsNumIn(Set*headint num)
{
int num_in_value=0;
Set* ptr=head->next;
// if(ptr==NULL&&num==EPS)
// {
// num_in_value=1;
// }
while (ptr!=NULL)
{
if(ptr->TerValue==num)
{
num_in_value=1;
}
ptr=ptr->next;
}
return num_in_value;
}

/*将souce中的元素无重复的加入dest中,第三个参数表示是否加入eps*/
int add(Set*destSet*sourcebool is_eps_in)
{
Set*ptr1;
Set*ptr2=source->next;
/*标识是否有新元素加入,0表示没有新元素加入*/
int is_added_value=0;
/*要求source中如果有eps,不加入dest中*/
if (is_eps_in==false)
{
while (ptr2!=NULL)
{
/*如果ptr2中无EpS,并且该值不在dest中,则将其元素加入dest*/
if (ptr2->TerValue!=EPS&& !IsNumIn(destptr2->TerValue))
{
ptr1=new Set;
ptr1->next=dest->next;
dest->next=ptr1;
ptr1->TerValue=ptr2->TerValue;
is_added_value=1;
}
ptr2=ptr2->next;
}//end of while
}//end of if
else
{
while (ptr2!=NULL)
{
/*该值不在dest中,则将其元素加入dest*/
if (!IsNumIn(destptr2->TerValue))
{
ptr1=new Set;
ptr1->next=dest->next;
dest->next=ptr1;
ptr1->TerValue=ptr2->TerValue;
is_added_value=1;
}
ptr2=ptr2->next;
}//end of while
}//end of if
return is_added_value;
}
int add(Set*destint value)
{
Set*ptr1;
int is_added_value=0;
if (!IsNumIn(destvalue))
{
ptr1=new Set;
ptr1->next=dest->next;
dest->next=ptr1;
ptr1->TerValue=value;
is_added_value=1;
}
return is_added_value;
}

void GetFirstSet()
{
//初始化非终结符和eps的first集
for (int t=TER_START;t {
FirstSet[t].next=new Set;
FirstSet[t].next->next=NULL;
FirstSet[t].next->TerValue=t;

}

//初始化非终结符的first集??此处可考虑将A->eps加入即可
for(int j=0;j {
Set*ptr=&FirstSet[j];
for (int k=0;k if (express[k][0]==j&&express[k][1]>=TER_START)
{
ptr->next=new Set;
ptr->next->next=NULL;
ptr->next->TerValue=express[k][1];
ptr=ptr->next;
}
}

//递归求非终结符的first集

int change_flag=1;/*设置标志位,1表示first集有变动,0表示first集无变动*/

while (change_flag==1)
{
change_flag=0;
for (int i=0;i {
int k=1;
bool keep_on=true;
int destination=express[i][0]; /*非终结符*/
while (keep_on &&express[i][k]!=-1)
{
int source=express[i][k];
int if_added=add(&Fir

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-03-27 14:35  报告-编译原理\
     目录           0  2013-02-19 13:18  报告-编译原理\LL1Final\
     目录           0  2013-02-19 13:18  报告-编译原理\LL1Final\Debug\
     文件      204898  2008-04-18 17:27  报告-编译原理\LL1Final\Debug\LL1Final.exe
     文件      331124  2008-04-18 17:27  报告-编译原理\LL1Final\Debug\LL1Final.ilk
     文件       36312  2008-04-18 17:26  报告-编译原理\LL1Final\Debug\LL1Final.obj
     文件      223980  2008-04-18 17:06  报告-编译原理\LL1Final\Debug\LL1Final.pch
     文件      517120  2008-04-18 17:27  报告-编译原理\LL1Final\Debug\LL1Final.pdb
     文件      172125  2008-04-16 22:26  报告-编译原理\LL1Final\Debug\stack.exe
     文件      173268  2008-04-16 22:26  报告-编译原理\LL1Final\Debug\stack.ilk
     文件        5211  2008-04-17 22:52  报告-编译原理\LL1Final\Debug\stack.obj
     文件      222652  2008-04-16 22:26  报告-编译原理\LL1Final\Debug\stack.pch
     文件      345088  2008-04-16 22:26  报告-编译原理\LL1Final\Debug\stack.pdb
     文件       50176  2008-04-18 17:27  报告-编译原理\LL1Final\Debug\vc60.idb
     文件       53248  2008-04-18 17:26  报告-编译原理\LL1Final\Debug\vc60.pdb
     文件        3145  2008-04-18 17:06  报告-编译原理\LL1Final\LL1.H
     文件       10697  2008-04-18 17:26  报告-编译原理\LL1Final\LL1Final.cpp
     文件        3605  2008-04-17 22:52  报告-编译原理\LL1Final\LL1Final.dsp
     文件         541  2008-04-16 21:28  报告-编译原理\LL1Final\LL1Final.dsw
     文件       66560  2008-04-18 17:27  报告-编译原理\LL1Final\LL1Final.ncb
     文件       54784  2008-04-18 17:27  报告-编译原理\LL1Final\LL1Final.opt
     文件         777  2008-04-18 17:27  报告-编译原理\LL1Final\LL1Final.plg
     文件         320  2008-04-16 18:19  报告-编译原理\LL1Final\LL1文法二.txt
     文件         480  2008-04-16 18:21  报告-编译原理\LL1Final\LL1文法另1.txt
     文件         594  2008-04-16 18:16  报告-编译原理\LL1Final\ll1文法改进.txt
     文件         107  2008-04-18 17:27  报告-编译原理\LL1Final\output.txt
     文件         784  2008-03-28 23:43  报告-编译原理\LL1Final\stack.cpp
     文件         571  2008-04-17 22:51  报告-编译原理\LL1Final\stack.h
     文件          55  2008-04-18 16:51  报告-编译原理\LL1Final\tokens.txt
     文件         480  2008-04-16 18:21  报告-编译原理\LL1Final\复件 LL1文法另1改进.txt
     目录           0  2013-02-19 13:18  报告-编译原理\LL1Final高级\
............此处省略167个文件信息

评论

共有 条评论