代码拉取完成,页面将自动刷新
同步操作将从 zren/compiler-homework2 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define KEY 6
char *keyword[KEY] = {"for", "if", "then", "else", "while", "do"};
char id[1024];
int num;
int token;
int m;
void lexical(FILE *fp) {
char x = getc(fp);
num = 0;
strcpy(id, "\0");
int n=0;
m=0;
while((x==' ')||(x=='\n'))
{
x=getc(fp);
}
if(((x<='z')&&(x>='a'))||((x<='Z')&&(x>='A')))
{
while(((x<='z')&&(x>='a'))||((x<='Z')&&(x>='A'))||((x>='0')&&(x<='9')))
{
id[m++]=x;
x=getc(fp);
}
ungetc(x, fp);
token=10;
for(n=0;n<6;n++)
{
if(strcmp(id,keyword[n])==0)
{
token=n+1;
break;
}
}
}
else if((x>='0')&&(x<='9'))
{
while((x>='0')&&(x<='9'))
{ num=num*10+x-'0';
x=getc(fp);
}
ungetc(x, fp);
token=11;
}
else switch(x)
{
case '<':
id[m++]=x;
x=getc(fp);
if(x=='=')
{ token=22;
id[m++]=x;
}
else if(x=='>')
{
token=21;
id[m++]=x;
}
else
{ token=20;
ungetc(x, fp);
}
break;
case '>':
id[m++]=x;
x=getc(fp);
if(x=='=')
{ token=24;
id[m++]=x;
}
else
{ token=23;
ungetc(x, fp);
}
break;
case ':':
id[m++]=x;
x=getc(fp);
if(x=='=')
{ token=18;
id[m++]=x;
}
else
{ token=17;
ungetc(x, fp);
}
break;
case '+':
token=13;
id[m++]=x;
break;
case '-':
token=14;
id[m++]=x;
break;
case '*':
token=15;
id[m++]=x;
break;
case '/':
token=16;
id[m++]=x;
break;
case '=':
token=25;
break;
case ';':
token=26;
id[m++]=x;
break;
case '(':
token=27;
id[m++]=x;
break;
case ')':
token=28;
id[m++]=x;
break;
case '#':
token=0;
id[m++]=x;
break;
default:
break;
}
id[m++]='\0';
}
//process x
//process each regex here
//store the result in global variables id, num, or token
//in case of backtrack, use
//ungetc(x, fp);
int main(int argc, const char *argv[])
{
/*if(argc < 2) {
printf("insufficient args\n");
return 1;
}*/
FILE *fp = fopen("test1.txt", "r");
do {
lexical(fp);
switch(token) {
case 10: printf("(id, %s)\n", id); break;
case 11: printf("(num, %d)\n", num); break;
case -1: printf("error!\n"); break;
default: printf("(%d, %s)\n", token, id);
}
} while(token != 0);
fclose(fp);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。