📄 cabuary.cpp
字号:
#include <iostream.h>
#include <string.h>
#include <stdio.h>
//保留字=1;标识符=2;常数=3;运算符=4;界符=5;
bool isLetter(char c){
switch(c){
case'a': return true;
case'b': return true;
case'c': return true;
case'd': return true;
case'e': return true;
case'f': return true;
case'g': return true;
case'h': return true;
case'i': return true;
case'j': return true;
case'k': return true;
case'l': return true;
case'm': return true;
case'n': return true;
case'o': return true;
case'p': return true;
case'q': return true;
case'r': return true;
case's': return true;
case't': return true;
case'u': return true;
case'v': return true;
case'w': return true;
case'x': return true;
case'y': return true;
case'z': return true;
case'A': return true;
case'B': return true;
case'C': return true;
case'D': return true;
case'E': return true;
case'F': return true;
case'G': return true;
case'H': return true;
case'I': return true; break;
case'J': return true; break;
case'K': return true; break;
case'L': return true; break;
case'M': return true; break;
case'N': return true; break;
case'O': return true; break;
case'P': return true; break;
case'Q': return true; break;
case'R': return true; break;
case'S': return true; break;
case'T': return true; break;
case'U': return true; break;
case'V': return true; break;
case'W': return true; break;
case'X': return true; break;
case'Y': return true; break;
case'Z': return true; break;
default: return false;break;
}
}
bool isDigit(char a){switch(a){
case'0': return true;
case'1': return true;
case'2': return true;
case'3': return true;
case'4': return true;
case'5': return true;
case'6': return true; break;
case'7': return true; break;
case'8': return true; break;
case'9': return true; break;
default: return false;break;
}
}
bool isAlphaDigit(char a){
switch(a){
case'a': return true;
case'b': return true;
case'c': return true;
case'd': return true;
case'e': return true;
case'f': return true;
case'g': return true;
case'h': return true;
case'i': return true;
case'j': return true;
case'k': return true;
case'l': return true;
case'm': return true;
case'n': return true;
case'o': return true;
case'p': return true;
case'q': return true;
case'r': return true;
case's': return true;
case't': return true;
case'u': return true;
case'v': return true;
case'w': return true;
case'x': return true;
case'y': return true;
case'z': return true;
case'A': return true;
case'B': return true;
case'C': return true;
case'D': return true;
case'E': return true;
case'F': return true;
case'G': return true;
case'H': return true;
case'I': return true; break;
case'J': return true; break;
case'K': return true; break;
case'L': return true; break;
case'M': return true; break;
case'N': return true; break;
case'O': return true; break;
case'P': return true; break;
case'Q': return true; break;
case'R': return true; break;
case'S': return true; break;
case'T': return true; break;
case'U': return true; break;
case'V': return true; break;
case'W': return true; break;
case'X': return true; break;
case'Y': return true; break;
case'Z': return true; break;
case'0': return true;
case'1': return true;
case'2': return true;
case'3': return true;
case'4': return true;
case'5': return true;
case'6': return true; break;
case'7': return true; break;
case'8': return true; break;
case'9': return true; break;
default: return false;break;
}
}
bool isword(char a[]){
// char *a=a[10];
int k=0;
char *symconst="const";
char *symvar="var";
char *symprocedure="procedure";
char *symcall="call";
char *symend="end";
char *symif="if";
char *symthen="then";
char *symwhile="while";
char *symdo="do";
char *symread="read";
char *symwrite="write";
char *symbegin="begin";
if(k=*a-*symconst==0&&*a++&&*symconst++)
return true;
else if(k=*a-*symvar==0&&*a++&&*symvar++)
return true;
else if(k=*a-*symprocedure==0&&*a++&&*symprocedure++)
return true;
else if(k=*a-*symcall==0&&*a++&&*symcall++)
return true;
else if(k=*a-*symend==0&&*a++&&*symend++)
return true;
else if(k=*a-*symif==0&&*a++&&*symif++)
return true;
else if(k=*a-*symthen==0&&*a++&&*symthen++)
return true;
else if(k=*a-*symwhile==0&&*a++&&*symwhile++)
return true;
else if(k=*a-*symdo==0&&*a++&&*symdo++)
return true;
else if(k=*a-*symread==0&&*a++&&*symread++)
return true;
else if(k=*a-*symwrite==0&&*a++&&*symwrite++)
return true;
else if(k=*a-*symbegin==0&&*a++&&*symbegin++)
return true;
else return false;
}
getsym(){
char c;int k=0;char A[11]="";
c=cin.get();
if(c==' ') getsym();
else if(c!=' '&&c!='\t'&&c!='\n'&&c!=EOF)
{
if(isLetter(c))
{A[k]=c;
if(k<11){k=0;
while(isAlphaDigit(cin.peek()))
{ k=k+1; A[k]+=char(cin.get()); }
}
for(int i=0;i<11;i++)
{ cout<<A[i];}
if(isword(A))
cout<<':'<<1<<endl;
else cout<<':'<<2<<endl;
}
else if(isDigit(c)){
int m=0;char B[10]="";
A[k]=c;
while(isLetter(cin.peek()))
B[m]=cin.get();m+=1;
while(isDigit(cin.peek()))
k+=1;A[k]+=char(cin.get());
}
if(isword(B[10]))
{for(int i=0;i<11;i++)
{ cout<<b[i];}
cout<<':'<<1<<endl;
}}else for(int i=0;i<11;i++)
{ cout<<A[i];}
cout<<':'<<"wrong"<<endl;
else switch(c){
case '+':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
// cout<<c<<':'<<4<<endl;
break;
case '-':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
break;
case '*':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
break;
case '/':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
break;
case '!':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
break;
case ':=':
cout<<c<<':'<<4<<endl;
break;
case '#':
cout<<c<<':'<<4<<endl;
break;
case '%':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
break;
case '^':
cout<<c<<':'<<4<<endl;
break;
case '(':
cout<<c<<':'<<4<<endl;
break;
case ')':
cout<<c<<':'<<4<<endl;
break;
case '=':
cout<<c<<':'<<4<<endl;
break;
case '<':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
break;
case '>':
A[0]=c;
if(cin.peek()=='=')
A[1]=cin.get();
cout<<A<<':'<<4<<endl;
break;
case '"':
cout<<c<<':'<<5<<endl;
break;
case '`':
cout<<c<<':'<<5<<endl;
break;
case ',':
cout<<c<<':'<<5<<endl;
break;
case '.':
cout<<c<<':'<<5<<endl;
break;
case ';':
cout<<c<<':'<<5<<endl;
break;
default: cout<<c<<":"<<" "<<"It's a wrong sign!"<<endl;
break;
}
//return true;
}
}
void main(){
// char c;
int k=0;char A[9]="";int cc=0;
//ken=" ";
cout<<"please write the program:"<<endl;
getsym();
//if(c!=' '&&c!='\t'&&c!='\n'&&c!=EOF)
getsym();
getsym(); getsym(); getsym(); getsym(); getsym(); getsym(); getsym(); getsym(); getsym(); getsym(); getsym();
getsym();getsym();getsym();getsym();getsym();getsym();getsym();getsym();getsym();getsym();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -