📄 cifafenxi.c
字号:
/* HELLO.C -- Hello, world */
/**********************
student:LiPeng
Date : 2008-12-5
**********************/
#include "stdio.h"
#include "conio.h"
#include "string.h"
#define BEGIN 1 /* The Token class for word begin */
#define NUMB 2
#define IDEN 3
#define ADD 4
#define MULT 5
#define ASS 6
#define READ 7
#define WRITE 8
#define SEMI 9
#define OPEN 10
#define CLOSE 11
#define END 12
#define MYEOF -1
#define is_end_of_input(ch) ((ch)=='\0')
#define is_lc_letter(ch) ('a'<=(ch)&&(ch)<='z')
#define is_uc_letter(ch) ('A'<=(ch)&&(ch)<='Z')
#define is_letter(ch) ('a'<=(ch)&&(ch)<='z'||'A'<=(ch)&&(ch)<='Z')
#define is_digit(ch) ('0'<=(ch)&&(ch)<='9')
#define is_letter_or_digit(ch) (is_letter(ch)||is_digit(ch))
#define is_operator(ch) ((ch)=='+'||(ch)=='-'||(ch)=='*')
#define is_layout(ch) (!is_end_of_input(ch)&&(ch)<=' ')
FILE *fp;
char ch;
typedef struct{
int class;
char seman[100];
}Token_type;
Token_type Token;
/*
function:next char
in parameter:
out parameter:
*/
void next_char(){
ch=fgetc(fp);
}
/*
function:error return
in parameter:
out parameter:
*/
void error(){
printf("the unidentify char\n");
Token.class=-2;strcpy(Token.seman,"");
next_char();
}
/*
function:
in parameter:
out parameter:
*/
void recognize_number(){
int N=0;
int pos =0;
while(is_digit(ch)){
N=N*10+(ch-'0');
Token.seman[pos]= ch;
pos++;
next_char();}
Token.class=NUMB;
}
/*
function:
in parameter:
out parameter:
*/
void recognize_name(){
char name[1000];
int np=0;
name[np++]=ch;
next_char();
while(is_digit(ch)||is_letter(ch)){name[np++]=ch;next_char();}
name[np]='\0';
if(strcmp(name,"begin")==0){
Token.class=BEGIN; strcpy(Token.seman,"");}
else if(strcmp(name,"end")==0){
Token.class=END; strcpy(Token.seman,"");}
else if(strcmp(name,"read")==0){
Token.class=READ; strcpy(Token.seman,"");}
else if(strcmp(name,"write")==0){
Token.class=WRITE; strcpy(Token.seman,"");}
else {Token.class=IDEN; strcpy(Token.seman,name);}
}
/*
function:
in parameter:
out parameter:
return value
*/
void next_avail_char(){
while(is_layout(ch)){
next_char();
}
}
/*
function:
in parameter:
out parameter:
return value
*/
void next_token(){
next_avail_char();
switch(ch){
case '0' :
case '1' :
case '2' :
case '3' :
case '4' :
case '5' :
case '6' :
case '7' :
case '8' :
case '9' :
recognize_number(); break;
case 'a' :
case 'b' :
case 'c' :
case 'd' :
case 'e' :
case 'f' :
case 'g' :
case 'h' :
case 'i' :
case 'j' :
case 'k' :
case 'l' :
case 'm' :
case 'n' :
case 'o' :
case 'p' :
case 'q' :
case 'r' :
case 's' :
case 't' :
case 'u' :
case 'v' :
case 'w' :
case 'x' :
case 'y' :
case 'z' :
case 'A' :
case 'B' :
case 'C' :
case 'D' :
case 'E' :
case 'F' :
case 'G' :
case 'H' :
case 'I' :
case 'J' :
case 'K' :
case 'L' :
case 'M' :
case 'N' :
case 'O' :
case 'P' :
case 'Q' :
case 'R' :
case 'S' :
case 'T' :
case 'U' :
case 'V' :
case 'W' :
case 'X' :
case 'Y' :
case 'Z' :
recognize_name();break;
case '+' : Token.class=ADD;strcpy(Token.seman,"");next_char();break;
case '*' : Token.class=MULT;strcpy(Token.seman,"");next_char();break;
case ':' : next_char();if(ch!='=') error();
else {Token.class=ASS;strcpy(Token.seman,"");next_char();}break;
case ';' : Token.class=SEMI;strcpy(Token.seman,"");next_char();break;
case '(' : Token.class=OPEN;strcpy(Token.seman,"");next_char();break;
case ')' : Token.class=CLOSE;strcpy(Token.seman,"");next_char();break;
case '\0' :Token.class=EOF;strcpy(Token.seman,"");next_char();break;
default : error();
}
}
main()
{
if((fp=fopen(".\\code.txt","r"))==0){
printf("open failed");
}
ch=fgetc(fp);
while(ch != MYEOF)
{
next_token();
printf("%d %s\n",Token.class,Token.seman);
}
getch();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -