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

编译原理课程设计说明书--词法分析,语法分析,语义分析

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

桂林电子科技大学编译原理课程设计说明书 第23页

{ c = getchar(); } if( (c <= '9' && c>= '0') | (c>= 'a' && c<= 'z')) return; else if( c == '(') { f_exp(); if(c == ')') { return ; }else{ cout<<\括号匹配错误\ exit(0); } } else{ cout<<\当前错误字符:\ exit(0); } }

void f_exp_remains(){ if(flag == 1) { c = getchar(); } if(c == '$'){ flag = 1; return; } if(c == '+'){ flag = 1; f_term(); f_exp_remains(); } else if(c == ')'){ flag = 0; return ; }else{ cout<<\当前错误字符:\ exit(0); }

桂林电子科技大学编译原理课程设计说明书 第24页

}

void f_term_remains(){ if(flag == 1){ c = getchar(); } if(c == '*'){ flag = 1; f_factor(); f_term_remains(); } else{ flag = 0; //这里如果不是*,T’直接取空,递退到上级函数处理,所以当前输入字符没有处理,flag = 0,调用的下一个函数不能输入新的字符 return; } }

fisrt集计算:

#include #include #include using namespace std;

struct define //文法存储形式 {

char left;

string right; };

/*统计文法条数,非终止符个数,终止符个数,并把非终止符,终止符弄成一个字符串,用于查找下标*/

void get_gene(); //获得产生式,并统计

int get_index(char b); //得到终止符,或非终止符统一下标

void add(string &tLeft , string s); //将s添加到tLeft中,即将右边的字符串添加到左边的字符串中,去掉重复,如果右边存在新的字符,要将flag置为 1 ,用于不动点算法。

void first(); //计算first集

string s_NT=\ //用于存储所有出现的非终止符,终止符(统一下标查找) struct define *p = new define[10]; //文法数组

string *tFirst=new string [10];//存非终结符的first集 int counts , tCount , ntCount; //文法条数,终结符符数,非终结符个数

桂林电子科技大学编译原理课程设计说明书 第25页

bool flag=1; //用于不动点算法

int main() {

int i;

get_gene(); //获得产生式,并统计 first();

cout<<\ for(i=0;i

cout<<\ return 0; }

void first() {

int i,j;

string rights,tmp; flag=1; while(flag) { flag=0;//若无更新,下一循环将退出 for(i=0;i='A'))//终结符 { tmp.append(1,rights[j]);//将字符转为字符串 add(tFirst[get_index(p[i].left)],tmp);//若是终止符,则直接加入该first集 tmp=\恢复为空串 break; } else{ if((int)(tFirst[get_index(rights[j])]).find('@')==-1)//该终结符不含'@' {

add(tFirst[get_index(p[i].left)],tFirst[get_index(rights[j])]);//将非终结符的rights[j]集加到p[i].left的first集中 break;

桂林电子科技大学编译原理课程设计说明书 第26页

} else

if((int)(tFirst[get_index(rights[j])]).find('@')!=-1&&j

/*统计文法条数,非终止符个数,终止符个数,并把非终止符,终止符弄成一个字符串,用于查找下标*/

void get_gene() //获得产生式,并统计 {

ifstream in(\ int i; char b; tCount=0; counts = 0;

while( in>> p[counts].left >> b >> p[counts].right) //输入文法,一次获取一行 counts++;

in.close();

cout<

for(i=0;i

/*统计非终止符,终止符*/ for(i=0;i

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