|
软件标签: java编程 java
java词法分析器是由c语言编译而成,是款比好用的编程软件,大家可以试用一下,在原有的基础上增加一些自己的代码,使其更加完善。需要注意的是,这些代码中有一些功能还未完善,大家可以自己研究研究。
词法分析器步骤
先写其正则式,然后nfa,然后dfa,然后对其进行优化,最后准备工作做好了,就可以开始写代码了。
主函数
enum token_type {
keyword =1, ? ? ? ? ? ? ?//关键字
identifier, ? ? ? ? ? ?//标识符
operatorr, ? ? ? ? ? ? //运算符
operatorrd, ? ? ? ? ? ? //单运算符
constant, ? ? ? ? ? ? ?//常量
escape, ? ? ? ? ? ? ? ?//转义符
separator, ? ? ? ? ? ? ?//界限符
notype, ? ? ? ? ? ? ? ? ?//没有类型
zhushi ? ? ? ? ? ? ? ? ? //注释类型
};
对其单词的类型定义成枚举。
typedef struct token {
token_type type; //其类型
char *lexeme ; ? ?//字符串
int ?value; ? ? ? //属性值
}token;
//返回单词的结构。
void initscanner(char *ch){
fp1 = fopen(ch,"r+");
lineno = 1;
}//初始化分析器。
void closescanner(){
fclose(fp1);
}//关闭分析器
void emptytokenstring(){
memset(tokenbuffer,0,100);
}//清空缓冲区
static void addchartokenstring(char char)
{
int tokenlenth=strlen(tokenbuffer);
if(tokenlenth+1==sizeof(tokenbuffer)) return;
tokenbuffer[tokenlenth]=char;
tokenbuffer[tokenlenth+1]=“�“;
} //将一个字符添加到缓冲区
static char getchar(){
char char;
char = fgetc(fp1);
return char;
}//从文件中读取一个字符
static void backchar(char char) {
if(char!=eof){
ungetc(char,fp1);
}
}//将其字符后退一个。
static token judgekeytoken(char *idstring);//这个函数实现对关键字进行判断

|
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|