📄 pre.cpp
字号:
#include"lex.h"
int buf_pos=0,frag1=0;
char ch,ch1;
char buffer[MAX];
char strout2[1000];
int c2=0;
int col=1;
void fre_buf(int frag)//加载缓冲区,作预处理
{
int i,j;
if(frag==0)
{
j=0;
}
else
{
j=MAX/2;
}
for(i=0;i<MAX/2;)
{
ch=fgetc(fd);
if(ch==' '||ch=='\t'||ch=='\r')
{
buffer[i+j]=' ';
i++;
for(ch=fgetc(fd);ch==' '||ch=='\t';ch=fgetc(fd));
buffer[i+j]=ch;
}
else
{
buffer[i+j]=ch;
}
i++;
}
}
char gch()//缓冲区空,轮流加载左右缓冲半区
{
int frag;
if(buf_pos==0&&frag1==0)
{
frag=0;
fre_buf(frag);
}
if(buf_pos==MAX/2&&frag1==0)
{
frag=1;
fre_buf(frag);
}
return(buffer[buf_pos]);
}
char get_ch()
{
ch1=gch();
buf_pos++;
if(buf_pos==MAX-1)
{
buf_pos=0;
}
if(frag1>0)
{
frag1--;
}
strout2[c2++]=ch1;//存储源程序到strout2[]中,供输出用
if(strout2[c2-1]=='\n')
{
col++;
}
return(ch1);
}
void retract()
{
buf_pos--;
c2--;
if(buffer[buf_pos]=='\n')
{
col--;
}
if(buf_pos<0)
{
buf_pos=MAX-1;
}
frag1++;
ch=' ';
return;
}
///////////////简单判断
int IsSign(char currentch)
{
if((currentch>='A'&¤tch<='Z')||(currentch>='a'&¤tch<='z')
||(currentch>='0'&¤tch<='9')||(currentch=='+')||(currentch=='-')
||(currentch=='*')||(currentch=='/')||(currentch=='=')||(currentch=='<')
||(currentch=='>')||(currentch=='(')||(currentch==')')||(currentch=='[')
||(currentch==']')||(currentch==':')||(currentch=='.')||(currentch==';')
||(currentch==',')||(currentch=='\''))
{
return 1;
}
else
{
return 0;
}
}
int IsLetter(char currentch)
{
if((currentch>='A'&¤tch<='Z')||(currentch>='a'&¤tch<='z'))
{
return 1;
}
else
{
return 0;
}
}
int IsDigit(char currentch)
{
if(currentch>='0'&¤tch<='9')
{
return 1;
}
else
{
return 0;
}
}
int IsGJZ(char str[])
{
int i,m;
for(i=0;i<=34;)
{
m=strcmp(str,guanjian[i]);
if(m==0)
{
return(i+1);
}
i++;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -