这个是我编译原理课程设计的 内容,呵呵 我遍的是词法分析,基本的功能都能够实现,如词法分析,词法查错,删除无实质意义的字符等,不懂编译的就不用看了,编译真的很难!!!不过好象没什么用
#include<iostream.h>
#include<ctype.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define ID 6
#define INT 7
#define LT 8
#define LE 9
#define EQ 10
#define NE 11
#define GT 12
#define GE 13
#define FZ 14
#define DEV 15
strUCt KeyWord //要害字结构
{
char *word;
int id;
};
KeyWord keyword[]={ //要害字数组
,
,
,
,
,
,
,
};
char TOKEN[20];
int graphnum=1; //记录错误所在的位置
int lookup(char *string);
void out(int id ,char *string);
void report_error(char ERR_CH);
bool isalpha(char c) ;
bool isdigit(char c);
bool isalnum(char c);
void scanner_example(FILE *fp);
int lookup(char *string)
{
for(int i=0;i<sizeof(keyword)/sizeof(KeyWord);i++)
{
if(strcmp(string,keyword[i].word)==0)
return keyword[i].id;
}
return 0;
}
void out(int id ,char *string)
{
printf("(%d,%s) ",id,string);;
}
void report_error(char ERR_CH) //错误处理程序
{
printf("undeclared identifler %c int %d line! ",ERR_CH,graphnum);
}
bool isalpha(char c)
{
if( (c>='a'&&c<='z') (c>='A'&&c<='Z') )
return true;
else
return false;
}
bool isdigit(char c)
{
if(c>='0'&&c<='9')
return true;
else
return false;
}
bool isalnum(char c)
{
if( isalpha(c) isdigit(c) )
return true;
else
return false;
}
void scanner_example(FILE *fp)
{
char ch;
int i,c;
while(!feof(fp))
{
ch=fgetc(fp);
if(isalpha(ch))
{
TOKEN[0]=ch;
ch=fgetc(fp);
i=1;
while(isalnum(ch))
TOKEN[i]='