📄 wordanalysoperator.cpp
字号:
/* 保留字表和标识符表,符号表
判断读入的字符或者字符串是不是保留字
如果不是的话则将读入的字符加入到符号表*/
#include <stdio.h>
#include <stdlib.h>
char GetBC(char ch); //检查输入的ch是否为空,若为空则返回0,否则返回1
int IsLetter(char ch); //判断读入的字符是不是字母
int IsDigit(char ch); //判断读入的字符是不是数字
void Concat(char *strToken,char ch); //将输入的字符加入到字符串之后
void Retract(char *strToken,char ch);//将搜索指示器调回一个位置,并且将ch清空
int InsertId(char *strToken); //将strToken中的常数插入符号表,返回其指针
int InsertConst(char *strToken); //将strToken中的常数插入常数表,返回其指针
void main()
{
int code,value;
// int i;
char *strToken;
char ch;
*strToken="";
ch=getchar();
ch=GetBC(ch);
//i=GetBC(ch); //检查输入的ch是否为空,若为空则返回0,否则返回1
/*if(i==0)
{
printf("输入的为空字符,没有可以处理的内,请选择是否继续,1为继续,2为退出\n");
scanf("%d",&n);
switch(n)
{
case 1: ch=gechar();
case 2: break;
default break;
}
}
*/
//else
//{
if(IsLetter(ch)) //判断输入的是不是字母
{
Concat(*strToken,ch); //将输入的字符加入到字符串之后
ch=getchar();
while(IsLetter(ch)||IsDigit(ch)) //判断输入的字符是数字或者字母,如果是的话则继续输入
{
Concat(strToken,ch); //继续将输入的字符加入到字符串后
ch=gechar();
}
Retract(strToken,ch); //将搜索指示器调回一个位置,并且将ch清空
code=Reserve(strToken); /*判断读入的字符串是不是保留字,如果是保留字的话则返回它的
编码,不是的话返回0*/
if(code=0) //读入的是不是保留字,则它是以个标识符
{
value=InsertId(*strToken); //将字符串中的标识符插入到符号表里,返回符号表指针
return ($ID,value);
}
else
return (code, -); //返回保留字的编码
}
else if(IsDigit(ch))
{
Concat(*strToken,ch); //将输入的字符加入到字符串之后
ch=getchar();
while(IsDigit(ch))
{
Concat(strToken,ch); //继续将输入的字符加入到字符串后
ch=gechar();
}
Retract(strToken,ch); //将搜索指示器调回一个位置,并且将ch清空
value=InsertConst(strToken); //将strToken中的常数插入常数表,返回其指针
return ($INT, value);
}
else if(ch=='=') return($ASSIGN,-);
else if(ch=='+') return($PLUS,-);
else if(ch=='*')
{
Concat(strToken,ch);
ch=gechar();
if(ch=="*") return($POWER,-);
Retract(strToken,ch);
return ($STAR,-);
}
else if(ch==';') return($SEMICOLON,-);
else if(ch=='(') return($LPAR,-);
else if(ch==')') return($RPAR,-);
else if(ch=='{') return($LBRACE,-);
else if(ch=='}') return($RBRACE,-);
}
char GetBC(char ch) //检查输入的ch是否为空,若为空则返回0,否则返回1
{
if(ch=="")
{
ch=getchar();
}
return ch;
}
int IsLetter(char ch) //判断读入的字符是不是字母
{
if(((ch>='A')&&(ch<='Z'))||((ch>='a')&&(ch<='z')))
return 1;
}
int IsDigit(char ch) //判断读入的字符是不是数字
{
if((ch<='9')&&(ch>='0'))
return 1;
}
void Concat(char *strToken[],char ch) //将输入的字符加入到字符串之后
{
*(strToken+1)=ch;
}
int Reserve(char *strToken)
{
}
void Retract(char *strToken,char ch)
{
strToken=strToken-1;
ch='';
}
struct digit_node{
int digit;
struct digit_node *next;
}
struct letter_node{
char letter;
struct letter_node *next;
}
struct remain_list{
char remain;
struct remian_list *next;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -