代码拉取完成,页面将自动刷新
同步操作将从 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;
void lexical(FILE *fp) {
char x = getc(fp);
num = 0;
strcpy(id, "\0");
while(x==' '||x=='\t'||x=='\n')
x=getc(fp);
if(x>='0'&&x<='9')
{
int i=0;
for(;x>='0'&&x<='9';x=getc(fp))
id[i++]=x;
id[i]='\0';
num=atoi(id);
token=11;
ungetc(x, fp);
}
else if((x>='a'&&x<='z')||(x>='A'&&x<='Z'))
{
int i=0;
for(;(x>='a'&&x<='z')||(x>='A'&&x<='Z')||(x>='0'&&x<='9');x=getc(fp))
id[i++]=x;
id[i]='\0';
token=10;
int j=0;
for(j=0;j<6;j++)
{
if(strcmp(keyword[j],id)==0)
{
token=j+1;
break;
}
}
ungetc(x, fp);
}
else
{
int i=0;
switch(x)
{
case '+':token=13;id[i++]='+';break;
case '-':token=14;id[i++]='-';break;
case '*':token=15;id[i++]='*';break;
case '/':token=16;id[i++]='/';break;
case ':':token=17;id[i++]=':';
x=getc(fp);
if(x=='=')
{
token=18;
id[i++]='=';
}
else
ungetc(x, fp);
break;
case '<':token=20;id[i++]='<';
x=getc(fp);
if(x=='>')
{
token=21;
id[i++]='>';
}
else if(x=='=')
{
token=22;
id[i++]='=';
}
else
ungetc(x, fp);
break;
case '>':token=23;id[i++]='>';
x=getc(fp);
if(x=='=')
{
token=24;
id[i++]='=';
}
else
ungetc(x, fp);
break;
case '=':token=25;id[i++]='=';break;
case ';':token=26;id[i++]=';';break;
case '(':token=27;id[i++]='(';break;
case ')':token=28;id[i++]=')';break;
case '#':token=0;id[i++]='#';break;
default:break;
}
id[i]='\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(argv[1], "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);
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。