📄 00045.cpp
字号:
#include"iostream"
using namespace std;
#define NUMBER 1
#define IDEN 2
#define is_letter(ch) ((ch)>='a' && (ch)<='Z')
#define is_digit(ch) ((ch)>='0' && (ch)<='9')
#define is_layout(ch) ((ch)==' ')
#define MAXSIZE 100
typedef struct
{
int classe;
char seman1[];0
int seman2;
}token;
token str[MAXSIZE];
int* k;
int i=0;
k=&i;
void next_token(char* p)
{
if(is_layout(*p))
*(p++);
if(is_digit(*p))
recognize_number(*p);
else if(is_letter(*p))
recognize_name(*p);
switch(*p)
{
case '+': str[(*k)++)].seman1="PLUS";break;
case '*': str[*(k++)].seman1="MULT";break;
case '(': str[*(k++)].seman1="OPEN";break;
case ')': str[*(k++)].seman1="CLOSE";break;
case ';': str[*(k++)].seman1="SEMI";break;
case ':': if(*(++p)!='=')
exit(1);
str[*(k++)].seman1="ASS";break;
default : exit(1);
}
}
void recognize_number(char *p)
{
int N=0;
while((is_digit(*p)
{
N=N*10+(*p-'0');
*(p++);
}
str[*k].classe=1;
str[*k].seman2=N;
*(k++);
}
void recognize_name(char *p)
{
char name[]="";
int i=0;
name[i]=*p;
*(p++);
while(is_digit(*p) || is_letter(*p))
name[i++]=*(p++);
name[i]='\0';
switch(name)
{
case "begin" : str[*(k++)].seman1="BEGIN";break;
case "end" : str[*(k++)].seman1="END";break;
case "read" : str[*(k++)].seman1="READ";break;
case "write" : str[*(k++)].seman1="WRITE";break;
default : str[*k].classe=2;str[*(k++)].seman1=name;break;
}
}
int main()
{
char str1[]="begin x:=10; read(y); x:=x+y end#";
char* p;
p=str1;
while(*(p++)!='#')
{
next_token(p);
}
getchar();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -