⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simplescanner.cpp

📁 手工构造简单的C minus词法分析器 simple Scanner For C-
💻 CPP
字号:
#include<string.h>
#include<stdio.h>

#include<ctype.h>
#define  MAX 20
#define  MAXBUF 500


int lineno;

char *kw[6] = {"else","if","int","return","void","while"}; //存放c-的关键字


void main()
{   printf("please input your program:\n");
	
	
	

	while(1){
	char buf[MAXBUF]={0}; 
	char number[MAX]={0};
	char letter[MAX]={0};
	gets(buf);
  

    for(int i=0; i<sizeof(buf);i++)
	{
		if(isdigit(buf[i])){
			
			int m=0;
			while(isdigit(buf[i+1])&&m<MAX){
				
				number[m]=buf[i];
				i++;m++;
				
			}
			number[m]=buf[i];		
			printf("NUMBER: %s\n", number);
			for(int j=0;j<MAX;j++){
				number[j]=0;
			}//清空NUMBER数组
		}else if(isalpha(buf[i])){
			int m=0;
			while(isalpha(buf[i+1])&&m<MAX){
				letter[m]=buf[i];
				i++;m++;
			}
			letter[m]=buf[i];
			int flag=0;
		
			for(int c=0;c<6;c++){
				if(strcmp(letter,kw[c])==0){
					printf("keyword: %s\n", letter);
					flag=1;
				}
					
			}
			if(flag==0)
				printf("ID: %s\n", letter);
				
			for(int j=0;j<MAX;j++){
				letter[j]=0;
			}
		}else if (buf[i] =='\n'){
		    lineno++;
		} else if(buf[i]==' '|| buf[i]=='\t') {
		
		}else if(buf[i]=='+'){
			printf("+\n");
		}else if(buf[i]=='-'){
			printf("-\n");
		}else if(buf[i]=='*'){
			printf("*\n");
		}else if(buf[i]=='/'){
			int n=i+2;
			if(buf[i+1]=='*'){
				for(;n<sizeof(buf);n++){
					if(buf[n]=='*'&&buf[n+1]=='/'){
						printf("comment\n");
						break;
					}
				}// comment
			i=n+1;	
			}else{
				printf("/\n");
			}	
		}else if(buf[i]=='<'){
			
			if(buf[i+1]=='='){
				printf("<=\n");
			}else{
				printf("<\n");
				
			}
			
		}else if(buf[i]=='>'){
			
			if(buf[i+1]=='='){
				printf(">=\n");
			}else{
				printf(">\n");
			}
		}else if(buf[i]=='!'){
			if(buf[i+1]=='='){
				printf("!=\n");
			}else{
				printf("!\n");
			}
			
		}else if(buf[i]=='='){
			if(buf[i+1]=='='){
				printf("==\n");
			}else{
				printf("=\n");
			}
		}else if(buf[i]==';'){
			printf(";\n");
		}else if(buf[i]==','){
			printf(",\n");
		}else if(buf[i]=='('){
			printf("(\n");
		}else if(buf[i]==')'){
			printf(")\n");
		}else if(buf[i]=='['){
			printf("[\n");
		}else if(buf[i]==']'){
			printf("]\n");
		}else if(buf[i]=='{'){
			printf("{\n");
		}else if(buf[i]=='}'){
			printf("}\n");
		}
	}//end for
	 
}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -