- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理代码(Compiler principle code)
编译原理代码(Compiler principle code)
///////////////////////////////////////////////////////////////////
/ / / /董超勋的为循环语句翻译递归下降法输出三地址码/////////////
#定义最大100
#包括 iostream。”
#包括 stdio. h
#包括字符串。”
字符[最大];
ch;
int转;
焦strtoken [最大];
int类型;
int n = 0;//存放strtoken [ ]元素的个数
结构词/结构体存放单词
{
int类型;
焦字[最大];//存放strtoken [ ]的内容
};
//记录新单词;
词*记录[ 12 ];//放所有识别出来的单词,分别存放他们的编号以及字符串,X是其下标
////////////////////词法分析///////////////////////
国际buffer() /载入
{
int = i 0;
cout “输入程序,以”#”作为结束标志 endl。”;
为(int = 0;n max =;+ +)
{
为((i = max;i + +))
{
scanf(“%c”,与STR [我]);
///////////// CIN STR [我]不可用,用C语言读入字符。
如果(STR [我] = =“#”)
打破;///////如果尾数为识别码#,则表示程序读完,跳出循环。
}
打破;
}
返回(i);
}
bool IsLetter(ch)///////////判断是否是字母
{
如果(CH = 65和CH = 90 | | CH = 97和CH = 122)
返回(true);
其他的
返回(false);
}
bool IsDigit(ch)//////////判断是否是数字
{
如果(= = 48和CH = 57)
返回(true);
其他的
返回(false);
}
char GetChar(int i)///////读取字符
{
ch;
[我];
返回(CH);
}
焦getbc(ch)/ / / /判断是不是空格或者换行,如果是,直接读取下一个字符直道不再空白为止
{
如果(CH = = 32 | | CH = = 10)
{
转+;
CH = getchar(转);
CH = getbc(CH);/////////递归实现
返回(CH);
}
其他的
返回(CH);
}
无效concat() /////////////连接,即为strtoken [ ]赋值
{
strtoken [n] = CH;
氮+;
}
国际reserve() /////以单词为单位查找保留字,是则返回编码,不是则返回0,用来区分标志符和保留字
{
如果(strcmp(strtoken,“暗0”)= = 0)///////调用strcmp函数实现,
返回(1);
如果(strcmp(strtoken,”0“)= = 0)
返回(2);
如果(strcmp(strtoken,“步骤0”)= = 0)
返回(3);
如果(strcmp(strtoken,直至“0”)= = 0)
返回(4);
如果(strcmp(strtoken,
“做\ 0”= = 0)
返回(5);
其他的
返回(6);
}
无效clear()
{
n=0;
}
///////////// * * /////////////////语法递归分析
int(int,int,int和q)
{
如果(c = ++ = 3)
{
如果(c = q=7)
{ + +;
返回1;
}
别的{ cout “步右部出错” endl;return 0;}
}否则{ cout “错误的步骤” endl;return 0;}
}
int(int * b,int和o)
{
如果(b + + = 4)
{
如果(b = 7)
{ + +;
返回1;
}
别的{ cout “直到右部出错” endl;return 0;}
}否则{ cout “错误”到“ endl;return 0;}
}
int(int,d,int和h)
{
如果(d = ++ = 6)
{
如果(d = ++ = 8)
{
如果((D [H] = = 6 | | D [H] = = 7)){ H + +;return 1;}
别的{ cout “赋值语句右部出错” endl;return 0;}
}否则{ cout “赋值语句缺少赋值运算符” endl;return 0;}
}否则{ cout “赋值语句左部出错” endl;return 0;}
}
int(int,m,int和n)
{
如果(S2,m,n)
{
如果(a,m,n)
{
如果(
您可能关注的文档
- 给花友的养天资料(A date for a friend).doc
- 给药学本科毕业工作、考研迷茫的同学们(For graduates of pharmacy, postgraduate studies, confused students).doc
- 给高三学生5个建议(Give 5 suggestions to senior three students).doc
- 给宝宝选用枕头,4个误区和3个关键点(Choose the pillow for your baby, 4 mistakes and 3 key points).doc
- 络合滴定练习题(Complexometric titration exercises).doc
- 给排水安装工程施工组织设计(Construction design of water supply and drainage installation project).doc
- 络活喜论文选题职称论文题目(The topic title title Norvasc).doc
- 绝体绝命(Ruin oneself).doc
- 结构设计若干问题(Some problems in structural design).doc
- 绝对有用的46个生活小常识(46 useful little common sense).doc
文档评论(0)