无论是词法分析,还是语法分析,给我的第一感觉就是逻辑要严谨。由于项目有自己一套完整的语言和语法,设计好其对应的词法分析器和语法分析器显得尤为重要。
这里给您提供一个免费的java词法分析器下载
java词法分析器实现原理步骤
先写其正则式,然后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]='\0';
} //将一个字符添加到缓冲区
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);//这个函数实现对关键字进行判断
下面是源代码:
/************************************************************************
* CopyRight@ice-snow studio *
* email:bingxuefenggu@126.com *
* qq: 405116890 *
************************************************************************/
//只考虑到整形常量
//实型没考虑到
//需要解决转义符如何描述的问题
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define TOKEN_LEN 100
enum Token_Type {
keyword =1, //关键字
Identifier, //标识符
operatorr, //运算符
operatorrd, //单运算符
constant, //常量
escape, //转义符
separator, //界限符
notype, //没有类型
zhushi //注释类型
};
typedef struct Token {
Token_Type type; //其类型
char *lexeme ; //字符串
int value; //属性值
}Token;
static Token Token_Tap[] = {
{keyword,"abstract",0x103},
{keyword,"boolean",0x103},
{keyword,"break", 0x103},
{keyword,"byte" ,0x103},
{keyword,"case",0x103},
{keyword,"catch",0x103},
{keyword,"char", 0x103},
{keyword, "class",0x103},
{keyword,"const" ,0x103},
{keyword,"continue" ,0x103},
{keyword,"default" , 0x103},
{keyword,"do",0x103},
{keyword,"double",0x103},
{keyword,"else",0x103},
{keyword,"extends",0x103},
{keyword,"false",0x103},
{keyword,"final",0x103},
{keyword,"finally",0x103},
{keyword,"float",0x103},
{keyword,"for",0x103},
{keyword,"goto",0x103},
{keyword,"if",0x103},
{keyword,"implements",0x103},
{keyword,"import",0x103},
{keyword,"instanceof",0x103},
{keyword,"int",0x103},
{keyword,"interface",0x103},
{keyword,"long",0x103},
{keyword,"native",0x103},
{keyword,"new",0x103},
{keyword,"null",0x103},
{keyword,"package",0x103},
{keyword,"private",0x103},
{keyword,"protected",0x103},
{keyword,"public",0x103},
{keyword,"return",0x103},
{keyword,"short",0x103},
{keyword,"static",0x103},
{keyword,"super",0x103},
{keyword,"switch",0x103},
{keyword,"synchronized",0x103},
{keyword,"this",0x103},
{keyword,"throw",0x103},
{keyword,"throws",0x103},
{keyword,"transient",0x103},
{keyword,"true",0x103},
{keyword,"try", 0x103},
{keyword,"void",0x103},
{keyword,"volatile",0x103},
{keyword,"while",0x103},
{constant,"true",0x105},
{constant,"false",0x105}
//以上是所有的关键字
};
FILE *fp1;// 要读文件的描述符
int LineNo;//单词所在的行数
static char TokenBuffer[TOKEN_LEN];//单词符号的缓存区
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]='\0';
}
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){
int loop;
Token token;
for(loop=0;loop<51;loop++){
if(strcmp(Token_Tap[loop].lexeme,IDstring)==0)
return Token_Tap[loop];
}
token.type = Identifier;
//strcpy(token.lexeme,IDstring);//youwenti.
token.lexeme = IDstring;
token.value = 0x104;
return token;
}
- PC官方版
- 安卓官方手机版
- IOS官方手机版















鲜牛网游加速器4.6.6.2 电脑版
cFosSpeed破解版12.50.2525 中文免费版
奇游电竞加速器6.4.3 官方最新版
网易UU网游加速器(可免费加速steam)4.45.0 官方最新版
besttrace电脑版3.9.1.0 官方版
谷歌访问助手(Google Helper插件)2.6.2 官方版
speedtest网络测速软件1.8.156.1 单文件版
systemview通信系统仿真软件5.0 免费版
Windows U-Finder2.1.4 厂商免费版
水星MWU300T WPS安装程序1.0 官方安装版
绿联HDMI矩阵 RS232上位机软件1.10.01 绿色官方版
绿联云智能云存储pc版2.4.0.1915 一键安装版
cFosSpeed网络流量优化软件12.00.2512 免序列号去试用限制版
IP监测微信提醒工具(IPMonitor)2.0 免费版
新华三模拟器HCL2.1.2 最新版
佛山职业技术学院校园网登录软件0.2 破解版
局域网ip自动分配工具(运维/技术人员IP配置工具)1.1 单文件免费版
联想网课助手2.1.2 中文免费版
Exchang恢复软件(Shoviv Exchange Recovery Manager)19.11 英文特别版
Win10热点开机自启工具1.0 中文免费版
HS8145C5获取超级密码工具集合3 in 1 中文免费版
腾讯微云pc版5.2.1282 官方最新版
爱站工具包(爱站seo工具包)1.11.25.0 最新破解版
电信宽带上网助手9.5.2101.1318 官方版
猎豹免费wifi电脑版5.1 校园版
联想滑块验证助手1.1 单文件免费版
指定硬件厂商MAC地址生成工具1.0 中文免费版
ER系列路由器ISP数据库文件1.6版本
TP-LINK Web网管交换机客户端应用程序1.0.3 官网免费版
华为配置加解密工具1.0 简体中文版
全新 NETGEAR 网件精灵2.4.62 官方中文版
360随身wifi软件pc端
快牙电脑版2.8.0.0 官方最新版
爱微帮媒体版客户端2.16 官方最新版
蒲公英WiFi电脑端2.0.3官方版
WiFi共享大师3.0.0.6 官方最新版
青青草原WiFi电脑版5.2 免费版





广联达加密狗破解检测工具2.1.3 中文绿色版
诚龙网维全自动pxe网刻工具11.0 绿色最新版
spring源码深度解析pdf (中文版)电子版
学校机房批量控制关机源码1.0 绿色免费版
QSS快速安全设置工具14.0.162 中文安装版
TP-LINK WVR300无线路由器升级软件3.0.1408
易读宝电子书开发工具(电子书制作生成器)1.
局域网监控专家3.4.12 绿色免费版
网址信息批量检测工具2.0 简体中文共享版
delete on time(经年定时删除软件)1.01 免费