• 大小: 16.45MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-08
  • 语言: 其他
  • 标签: 编译技术  

资源简介

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

资源截图

代码片段和文件信息

#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 == ‘\n‘))//跳过空格和换行
{
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 ‘\0‘:
mark = -2;
break;
default:
mark = -1;
break;
}
token[m++] = ‘\0‘;
}
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  第一次上机\test.cpp
     文件       67953  2017-04-06 20:01  第一次上机\test.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_实验\flex\example.l
     文件         207  2004-08-30 15:31  第一次上机\第一次上机作业-lex实验\lex_实验\flex\example.l.bak
     文件      167936  1998-04-07 21:12  第一次上机\第一次上机作业-lex实验\lex_实验\flex\flex.exe
     文件        8628  2004-08-30 16:45  第一次上机\第一次上机作业-lex实验\lex_实验\flex\flex.GID
     文件       79089  1998-01-04 13:01  第一次上机\第一次上机作业-lex实验\lex_实验\flex\flex.hlp
     文件       36490  2017-04-06 20:46  第一次上机\第一次上机作业-lex实验\lex_实验\flex\lex.yy.c
     文件        1108  1998-04-07 21:12  第一次上机\第一次上机作业-lex实验\lex_实验\flex\libfl.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\.vs\lex.yy\
     目录           0  2017-04-20 15:51  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\.vs\lex.yy\v14\
     文件       20480  2017-04-20 15:51  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\.vs\lex.yy\v14\.suo
     目录           0  2017-04-20 15:50  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Backup\
     目录           0  2017-04-20 15:50  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\
     文件          51  2004-08-28 11:50  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\12.txt
     文件      163897  2004-08-30 16:09  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\lex.yy.exe
     文件      175892  2004-08-30 16:09  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\lex.yy.ilk
     文件       25472  2004-08-30 16:09  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\lex.yy.obj
     目录           0  2017-04-20 15:51  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\lex.yy.tlog\
     文件       33792  2004-08-30 16:09  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\vc60.idb
     文件       53248  2004-08-30 16:09  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\Debug\vc60.pdb
     文件       36489  2004-08-30 16:09  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\lex.yy.c
     文件        3437  2004-08-28 11:51  第一次上机\第一次上机作业-lex实验\lex_实验\lex_yy\lex.yy.dsp
............此处省略184个文件信息

评论

共有 条评论