无论是词法分析,还是语法分析,给我的第一感觉就是逻辑要严谨。由于项目有自己一套完整的语言和语法,设计好其对应的词法分析器和语法分析器显得尤为重要。
这里给您提供一个免费的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官方手机版















VMware External DNS自动化工具0.16.1+vmware.2 中文版
Drift Detector for Tanzu Kubernetes Grid Management Cluster 检测工具0.1.0 中文版
vSphere Software Asset Management Tool最新版1.5 中文版
VMware Cloud Gateway for VMC HLM M24镜像包8.0.2 中文版
VMware VCDA ALL镜像包4.7.x 中文版
tgz VMware On Demand Services SDK镜像包0.42.6 中文版
NSX Manager 6.4.14镜像包6.4.14 中文版
Workstation 17.6.4 中文免激活安装包17.6.3 中文版
鲜牛网游加速器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 免序列号去试用限制版
腾讯微云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 免费版





VMware Workstation P-ro最新版25H2 中文版
华夏网银批量汇款脱机编辑工具
ic卡信息读取工具3.0 绿色版
双路负载平衡的软路由器宽带合并工具(FNET
网亚局域网监控软件10.0.35 最新免费版
TP-LINK R483高速路由器升级软件3.0.140612
迅游激活码抢号工具1.0 绿色最新版 【迅游3
Free WiFi Hotspot(免费wifi热点扫描工具)3
科发JqueryEasyUi代码生成器3.5 破解版
双网卡带宽叠加程序含图文教程