if (k>=0 && i>=0) {end[k][i].adress=adr; return 1;}
return 0;
}
char* Variables::getname(int a, int b)
{
return end[a][b].data;
}
int Variables::getinit(int a, int b)
{
return end[a][b].init;
}
int Constants::hesh(int c)
{
c=abs(c);
while (c/10) c/=10;
return c;
}
int Constants::push(int c)
{
int s=0, k=hesh(c);
if (k>=0)
{
s=end[k].size();
C.data=c;
end[k].push_back(C);
}
return end[k].size()-s;
}
int Constants::find(int c)
{
int k=hesh(c);
if (k>=0)
for (int i=0; i<end[k].size(); i++)
if (end[k][i].data==c)
return i;
return -1;
}
int Constants::setadress(int c, void *adr)
{
int k=hesh(c), i=find(c);
if (k>=0 && i>=0) {end[k][i].adress=adr; return 1;}
return 0;
}
int Constants::getconst(int a, int b)
{
return end[a][b].data;
}
4.2
#include <conio.h>
#include "laba1.cpp"
FILE *in,*token,*error;
char buffer;
int buf=0, num=1;
Variables Var;
Constants Con;
int komment() //пропуск комментария на /*
{
char c;
int b=1;
do
{
fscanf(in,"%c",&c);
if (c=='*')
{
do fscanf(in,"%c",&c);while (c=='*');
if (c=='/') b=0;
}
if (c=='\n') num++;
} while (b && !feof(in));
return !b;
}
int nextline() //пропуск комментария на //
{
char str[80];
fscanf(in,"%s",str);
return 1;
}
int scan(char *term) //считывание терма
{
char c;
int n, i=0;
if (!buf) fscanf(in,"%c",&c);
else {c=buffer; buf=0;}
n=findSymbol(c);
if (!n) {term[0]=c; term[1]='\0'; return 0;} //недопустимый символ
if (n==1) // начинается с буквы (идентификатор)
{
do
{
term[i]=c; i++; //добавляем символ в выходной терм
fscanf(in,"%c",&c);
n=findSymbol(c);
} while ((n==1 || n==2) && !feof(in));
if (n==1 || n==2) {term[i]=c; term[i+1]='\0'; return 1;}
if (n==3) {term[i]='\0'; buffer=c; buf=1; return 1;}
do {term[i]=c; i++; fscanf(in,"%c",&c); n=findSymbol(c);}
while (n!=3);
term[i]='\0';
buffer=c; buf=1;
return -1;
}
if (n==2) // начинается с цифры (константа)
{
do
{
term[i]=c; i++; //добавляем символ в выходной терм
fscanf(in,"%c",&c);
n=findSymbol(c);
} while (n==2 && !feof(in));
if (n==2) {term[i]=c; term[i+1]='\0'; return 2;}
if (n==3) {term[i]='\0'; buffer=c; buf=1; return 2;}
do {term[i]=c; i++; fscanf(in,"%c",&c); n=findSymbol(c);}
while (n!=3);
term[i]='\0';
buffer=c; buf=1;
return -2;
}
term[0]=c; // обработка разделителя
if (c=='<' || c=='>' || c=='/')
{
fscanf(in,"%c",&c);
n=findSymbol(c);
if (n==3) {term[1]=c; i++;}
else {buffer=c; buf=1;}
}
term[i+1]='\0';
return 3;
}
void main1()
{
int n, i;
char file[80], term[80];
//in=fopen("input.txt","r");
//fscanf(in,"%s",file);
//fclose(in);
in=fopen("test.txt","r");
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.