📄 accidence.c
字号:
//accidence.c
///////////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include "accidence.h"
extern Token token_String[4096];
extern pSymbol SymbolList[4096];
static char *p_KeyWord[256];
static char c_Temp[256];
static int row=0,col=0;
static FILE *fp_Error;
main(int argc,char *argv[])
{
FILE *fp_Program,*fp_KeyWord,*fp_Token,*fp_SymbolList;
int i=0;
int temp;
for(i=0;i<4096;i++)
{
SymbolList[i]=NULL;
}
for(i=0;i<255;i++)
{
p_KeyWord[i]=NULL;
}
/* if (argc!=2)
{
printf("you forgot to type your programe name \n");
exit(0);
}
if(!(fp_Program=fopen(argv[1],"r")))
{
printf("Can't open file %s!",argv[1]);
exit(1);
}*/
if(!(fp_Program=fopen("efile.pas","r")))
{
printf("Can't open file rfile.pas!");
exit(1);
}
if(!(fp_KeyWord=fopen("KeyWord.dat","rb")))
{
printf("Can't open file KeyWord.dat!");
exit(1);
}
if(!(fp_Error=fopen("error.txt","w+")))
{
printf("Can't open file error.txt!");
exit(1);
}
for(i=0;!feof(fp_KeyWord);i++)
{
if(!(p_KeyWord[i]=(char*)malloc(20*sizeof(char))))
{
printf("Allocation momory fail!!");
exit(1);
}
fscanf(fp_KeyWord,"%s",p_KeyWord[i]);
}
free(p_KeyWord[i-1]);
p_KeyWord[i-1]=NULL;
while(!feof(fp_Program))
{
for(i=0;;i++)
{
if(i>255)
{
printerr(4);
fprintf(fp_Error,"This line is too long.Please 255 charactor a Line!\n");
c_Temp[i]='\n';
do
{
temp=getc(fp_Program);
}while(temp!=EOF&&temp!='\n');
break;
}
c_Temp[i]=fgetc(fp_Program);
if(c_Temp[i]=='\n')
break;
if(c_Temp[i]==EOF)
{
c_Temp[i]='\n';
break;
}
}
scanner(c_Temp);
row++;
}
fp_Token=fopen("token.txt","w+");
fp_SymbolList=fopen("symbol.txt","w+");
i=0;
while(token_String[i].Kin_Cod)
{
if(token_String[i].Kin_Cod<=37 && token_String[i].Kin_Cod>=34)
{
if(SymbolList[token_String[i].Index]->Type==IND||
SymbolList[token_String[i].Index]->Type==STRING)
fprintf(fp_Token,"(%d,'%s')",token_String[i].Kin_Cod,
SymbolList[token_String[i].Index]->Addr);
if(SymbolList[token_String[i].Index]->Type==INT)
fprintf(fp_Token,"(%d,%d)",token_String[i].Kin_Cod,
SymbolList[token_String[i].Index]->lVal);
if(SymbolList[token_String[i].Index]->Type==FLOAT)
fprintf(fp_Token,"(%d,%f)",token_String[i].Kin_Cod,
SymbolList[token_String[i].Index]->dVal);
}
else
fprintf(fp_Token,"(%d,_)",token_String[i].Kin_Cod);
fprintf(fp_Token,"\n");
i++;
}
i=0;
while(SymbolList[i])
{
if(SymbolList[i]->Type==IND)
fprintf(fp_SymbolList,"IND %s\n",SymbolList[i]->Addr);
if(SymbolList[i]->Type==INT)
fprintf(fp_SymbolList,"INT %ld\n",SymbolList[i]->lVal);
if(SymbolList[i]->Type==FLOAT)
fprintf(fp_SymbolList,"FLOAT %f\n",SymbolList[i]->dVal);
if(SymbolList[i]->Type==STRING)
fprintf(fp_SymbolList,"STRING %s\n",SymbolList[i]->Addr);
i++;
}
for(i=0;p_KeyWord[i];i++)
free(p_KeyWord[i]);
for(i=0;SymbolList[i];i++)
free(SymbolList[i]);
fclose(fp_Token);
fclose(fp_SymbolList);
fclose(fp_Program);
fclose(fp_KeyWord);
fclose(fp_Error);
system("edit token.txt");
system("edit symbol.txt");
system("edit error.txt");
}
/////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -