找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 9|回复: 0

java词法分析器绿色版

[复制链接]

32万

主题

0

回帖

96万

积分

超级版主

积分
964681
发表于 2025-3-14 11:43:59 | 显示全部楼层 |阅读模式
软件标签:  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
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|ziyuan80.com

GMT+8, 2025-8-10 21:22 , Processed in 0.074273 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表