📄 sm.cpp
字号:
#include<iostream.h>
#include<string.h>
char sm();
int entry();
void intput();
void out(char *,int);
void getchar();
void getbc();
void concat();
bool isletter();
bool isdigit();
int reserve();
void retract();
int insertid();
int insertconst();
void error();
char ch,d[100];
int j=0,m=0,n=0;
char strtoken[10];
static char key[5][10]={"begin","if","then","else","end"};
char name[20][10];
char const1[20][10];
char sm()
{
int code,value;
strtoken[0]='\0';
getchar();
getbc();
if(ch=='#')
return '#';
if(isletter())
{
while(isletter()||isdigit())
{
concat();
getchar();
}
retract();
code=reserve();
if(code==0)
{
value=insertid();
out("id",value);
return 'i';
}
else
out(key[code-1],code);
}
else if(isdigit())
{
while(isdigit())
{
concat();
getchar();
}
retract();
value=insertconst();
out("INT",value);
return 'c';
}
else if(ch=='='){
concat();
out("ASSIGN",0);
return '=';
}
else if(ch=='+'){
concat();
out("PLUS",0);
return '+';
}
else if(ch=='*')
{
concat();
getchar();
if(ch=='*'){
concat();
out("POWER",0);
return '^';
}else{
retract();
out("STAR",0);
return '*';
}
}
else if(ch==';'){
concat();
out("SEMICOLON",0);
return ';';
}
else if(ch=='('){
concat();
out("LPAR",0);
return '(';
}
else if(ch==')'){
concat();
out("RPAR",0);
return ')';
}
else if(ch=='{'){
concat();
out("LBRACE",0);
return '{';
}
else if(ch=='}'){
concat();
out("RBRACE",0);
return '}';
}
else {
error();
if(ch=='\n')
return '?';
}
return '|';
}
void intput()
{
cout<<"please input the string"<<endl;
int i=0;
while(1)
{
d[i]=cin.get();
if(d[i]=='#')
break;
i++;
}
};
void out(char *p,int v)
{
}
void getchar()
{
ch=d[j];
j=j+1;
}
void getbc()
{
while(ch==' ')
{
getchar();
}
}
void concat()
{
char p[2];
p[0]=ch;
p[1]='\0';
strcat(strtoken,p);
}
bool isletter()
{
if((ch>='a')&&(ch<='z'))
return 1;
else return 0;
}
bool isdigit()
{
if((ch>'0')&&(ch<'9'))
return 1;
return 0;
}
int reserve()
{
for(int k=0;k<5;k++)
if(strcmp(strtoken,key[k])==0)
return (k+1);
return 0;
}
void retract()
{
j=j-1;
ch=' ';
}
int insertid()
{
strcpy(name[m],strtoken);
m=m+1;
return(m-1);
}
int insertconst()
{
strcpy(const1[n],strtoken);
n=n+1;
return (n-1);
}
void error()
{
if(ch!='\n')
cout<<"the "<<j<<"th are illegal"<<endl;
}
int entry()
{
for(int k1=0;k1<20;k1++)
if(strcmp(strtoken,name[k1])==0)
return (k1+100);
return -1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -