大连理工大学 软件学院 编译技术 上机代码


大连理工大学 软件学院 编译技术 上机代码 六次上机全
资源截图
代码片段和文件信息
#include 
#include 
#include 
using namespace std;
char Input[100];
char token[20];//连续的词法单元
int mark=-1;                                                      //词法记号
char *Keytoken[6] = { “for““if““then““else““while““do“ };//关键字数组,用于判断
char ch;
int p = 0 n sum;
int m;//m为token下标

void Scanner()
{
sum = 0;
for (m = 0; m<20; m++)
token[m++] = NULL;
m = 0;
ch = Input[p++];
while ((ch == ‘ ‘) || (ch == ‘
‘))//跳过空格和换行
{
ch = Input[p++];
}
if (((ch <= ‘z‘) && (ch >= ‘a‘)) || ((ch <= ‘Z‘) && (ch >= ‘A‘)))
{
while (((ch <= ‘z‘) && (ch >= ‘a‘)) || ((ch >= ‘A‘) && (ch <= ‘Z‘)) || ((ch >= ‘0‘) && (ch <= ‘9‘)))
{
if (ch == ‘ ‘)
break;
token[m++] = ch;//将连续读入的字母存到token中
ch = Input[p++];
}
p--;
mark = 10;
for (n = 0; n<6; n++)
{
if (strcmp(token Keytoken[n]) == 0)//判断token存的字符串是否是关键字
{
mark = n + 1;
break;
}
}

}
else if ((ch >= ‘0‘) && (ch <= ‘9‘))
{
while ((ch >= ‘0‘) && (ch <= ‘9‘))//判断是否是数字
{
sum = sum * 10 + ch - ‘0‘;
ch = Input[p++];
}
p--;
mark = 11;
}
else switch (ch)//其他字符用switch判断之
{
case ‘<‘:
token[m++] = ch;
ch = Input[p++];
if (ch == ‘=‘)
{
mark = 22;
token[m++] = ch;
}
else if (ch == ‘>‘)
{
mark = 21;
token[m++] = ch;
}
else
{
mark = 20;
p--;
}
break;
case ‘>‘:
token[m++] = ch;
ch = Input[p++];
if (ch == ‘=‘)
{
mark = 24;
token[m++] = ch;
}
else
{
mark = 23;
p--;
}
break;
case ‘+‘:
token[m++] = ch;
ch = Input[p++];
if (ch == ‘+‘)
{
mark = 17;
token[m++] = ch;
}
else
{
mark = 13;
p--;
}
break;
case ‘-‘:
token[m++] = ch;
ch = Input[p++];
if (ch == ‘-‘)
{
mark = 29;
token[m++] = ch;
}
else
{
mark = 14;
p--;
}
break;
case ‘=‘:
mark = 25;
token[m++] = ch;
break;
case ‘*‘:
mark = 15;
token[m++] = ch;
break;
case ‘/‘:
mark = 16;
token[m++] = ch;
break;
case ‘(‘:
mark = 27;
token[m++] = ch;
break;
case ‘)‘:
mark = 28;
token[m++] = ch;
break;
case ‘;‘:
mark = 26;
token[m++] = ch;
break;
case ‘“‘:
mark = 30;
token[m++] = ch;
case‘:‘:
token[m++] = ch;
ch = Input[p++];
if (ch == ‘=‘)
{
mark = 18;
token[m++] = ch;
}
else
{
mark = 17;
p--;
}
break;

case ‘#‘:
mark = 0;
token[m++] = ch;
break;
case ‘‘:
mark = -2;
break;
default:
mark = -1;
break;
}
token[m++] = ‘‘;
}
int main()
{
int i = 0;
cout << “输入代码以‘#‘结束:“ << endl;
while ((cin>>noskipws>>ch)&&ch != ‘#‘)//输入代码
{
Input[i++] = ch;
}
while (mark != 0)
{
Scanner();//扫描代码
switch (mark)
{
case 11:
cout << “(“ << mark << ““ << sum << “)“ << endl;//定义变量
break;
case -1:
cout << “InputError“ << endl;//词法记号为-1,输入有误
exit(0);
case -2:
ex

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-04-20 15:23  第一次上机
     文件        3219  2017-04-06 20:01  第一次上机 est.cpp
     文件       67953  2017-04-06 20:01  第一次上机 est.exe
     文件      358782  2017-03-26 14:51  第一次上机第一次上机作业-lex实验.zip
     目录           0  2017-04-20 18:28  第一次上机第一次上机作业-lex实验
     目录           0  2004-08-30 17:21  第一次上机第一次上机作业-lex实验lex_实验
     文件        1374  2015-04-01 18:47  第一次上机第一次上机作业-lex实验lex_实验flex 说明.txt
     目录           0  2017-04-06 20:46  第一次上机第一次上机作业-lex实验lex_实验flex
     文件         190  2004-08-30 16:08  第一次上机第一次上机作业-lex实验lex_实验flexexample.l
     文件         207  2004-08-30 15:31  第一次上机第一次上机作业-lex实验lex_实验flexexample.l.bak
     文件      167936  1998-04-07 21:12  第一次上机第一次上机作业-lex实验lex_实验flexflex.exe
     文件        8628  2004-08-30 16:45  第一次上机第一次上机作业-lex实验lex_实验flexflex.GID
     文件       79089  1998-01-04 13:01  第一次上机第一次上机作业-lex实验lex_实验flexflex.hlp
     文件       36490  2017-04-06 20:46  第一次上机第一次上机作业-lex实验lex_实验flexlex.yy.c
     文件        1108  1998-04-07 21:12  第一次上机第一次上机作业-lex实验lex_实验flexlibfl.lib
     目录           0  2017-04-20 15:51  第一次上机第一次上机作业-lex实验lex_实验lex_yy
     目录           0  2017-04-20 15:51  第一次上机第一次上机作业-lex实验lex_实验lex_yy.vs
     目录           0  2017-04-20 15:51  第一次上机第一次上机作业-lex实验lex_实验lex_yy.vslex.yy
     目录           0  2017-04-20 15:51  第一次上机第一次上机作业-lex实验lex_实验lex_yy.vslex.yyv14
     文件       20480  2017-04-20 15:51  第一次上机第一次上机作业-lex实验lex_实验lex_yy.vslex.yyv14.suo
     目录           0  2017-04-20 15:50  第一次上机第一次上机作业-lex实验lex_实验lex_yyBackup
     目录           0  2017-04-20 15:50  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebug
     文件          51  2004-08-28 11:50  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebug12.txt
     文件      163897  2004-08-30 16:09  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebuglex.yy.exe
     文件      175892  2004-08-30 16:09  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebuglex.yy.ilk
     文件       25472  2004-08-30 16:09  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebuglex.yy.obj
     目录           0  2017-04-20 15:51  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebuglex.yy.tlog
     文件       33792  2004-08-30 16:09  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebugvc60.idb
     文件       53248  2004-08-30 16:09  第一次上机第一次上机作业-lex实验lex_实验lex_yyDebugvc60.pdb
     文件       36489  2004-08-30 16:09  第一次上机第一次上机作业-lex实验lex_实验lex_yylex.yy.c
     文件        3437  2004-08-28 11:51  第一次上机第一次上机作业-lex实验lex_实验lex_yylex.yy.dsp
............此处省略184个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)