资源简介
大连理工大学 软件学院 编译技术 上机代码
六次上机全
代码片段和文件信息
#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个文件信息
评论
共有 条评论