词法分析器java语言_词法分析器java版(java词法分析器)
无论是词法分析,还是语法分析,给我的第一感觉就是逻辑要严谨。由于项目有自己一套完整的语言和语法,设计好其对应的词法分析器和语法分析器显得尤为重要。
这里给您提供一个免费的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
#include
#include
#include
#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官方手机版
词法分析器java语言_词法分析器java版(java词法分析器)相关推荐
- s数据结构替换子表java版_数据结构与算法分析Java语言描述(第3版) PDF和源码免费 下载...
<数据结构与算法分析Java语言描述(第3版)>PDF和源码免费 下载 免积分下载 用户下载说明: 图书简介: 数据结构:Java语言描述(原书第3版)是国外数据结构与算法分析方面的经典教 ...
- java语言程序设计第十版(Introduce to java 10th) 课后习题 chapter6-27
java语言程序设计第十版(Introduce to java 10th) 课后习题 chapter6-27 自己纯手工,欢迎讨论 package chapter6;public class T27 ...
- Java语言程序设计(第3版)沈泽刚主编第5章课后习题答案
Java语言程序设计(第3版)沈泽刚主编第5章课后习题答案 5.1 编写程序,从键盘输入5个整数,存到一个数组,计算所有元素的最大值,最小值和平均值. import java.util.Scanner ...
- java语言的特点简单性,Java语言的特点
Java是一门面向对象编程语言,底层是C++语言.Java语言分为三大体系: • Java SE(标准版) • Java EE(企业版) • Java ME(微型版) Java语言的特点有以下几种: ...
- 《快乐编程大本营》java语言训练班-第4课:java流程控制
<快乐编程大本营>java语言训练班-第4课:java流程控制 第1节. 顺序执行语句 第2节. 条件分支语句:if条件语句 第3节. 条件分支语句:switch 条件语句 第4节. 条件 ...
- mongodb java 开源_开源的Mongodb java client -- mango发布
Mango ---- 一个非常简单的操作mongodb的小工具,使用java语言,基于mongodb的java driver包. 其主要的灵感来自于Jongo 项目,这是一个非常有创意的工具,将 ...
- 帮做Java_代写Heuristics、代做SAT、代写Java语言设计、代做Java代做Prolog|帮做Haskell程序...
代写Heuristics.代做SAT.代写Java语言设计.代做Java代做Prolog|帮做Haskell程序Heuristics and OptimizationLab assignment #2 ...
- 怎样重java初级到java中级_(续)Java进阶之路--从初级菜鸟到高级工程师
基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io的语法,虚拟机方面的语法. 1.一个".java"源文件中是否可以包括 ...
- java期末考试试题及答案_(完整word版)java期末考试试题(含答案)
模拟B卷 考试说明: 1.使用Eclipse编写程序.项目名称为:班级_姓名_学号_卷号.注意:卷号为A或B 2.在项目文件夹下新建一个文本文件,文件名为:答案.txt 3.将编程题外的所有题目写在文 ...
- Nginx面试!java语言程序设计第四版,你还看不懂吗?
第5章 持久化 持久化,Redis的持久化功能有效避免因进程退出造成的数据丢失问题,本章首先介绍RDB和AOF两种持久化配置和运行流程,其次对常见的持久化问题进行定位和优化,最后结合Redis常见的单 ...
最新文章
- 5单个编译总会编译全部_玩转Android10(五)源码编译开发中常用命令
- php 跳转qq群代码_PHP小脚本~QQ免KEY值加群
- JavaWeb第五讲 Web核心基础之HTTP协议
- flutter打包的app有多大_Flutter原生混合开发
- winxp精简版没有IIS的解决办法
- c++中unordered_map的坑
- 小米回应造车传闻;饿了么就春节“套路”骑手活动致歉;Go 1.16 正式发布 | 极客头条...
- 1)session总结
- php7视频处理扩展_PHP7扩展开发之类型处理
- 『号外号外』WoS数据库更新后导入VOSviewer出错的原因
- wifi服务器无响应如何修复,wifi打不开怎么修复?wifi打不开原因是什么
- Ubuntu20.04下opencv的安装
- MATLAB随机数的应用ppt,Matlab生成随机数.ppt
- Java角度制向弧度制转化
- Android视频录制,保存图片,视频到本地后本地相册或者视频库里面没有的解决方案
- Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC 8.6 - 图生成 小世界模型
- linux安卓导航软件下载,五款安卓导航(地图)软件耗电量评测
- 1MB有多少字节,1mb有多少个汉字,流量就这样被把握住
- C盘被$ESTBAK$占用100G
- 微博验证码识别系列三:根据微博验证码图片建立模型
热门文章
- 了解并应用数字隔离器的安全限值
- 免安装版mysql配置及使用Qt编译驱动
- CaffeNet从训练到分类及可视化参数特征 微调
- asp.net 母版与ajax使用 updatepanel,ASP.NET AJAX入门系列(9):在母版页中使用UpdatePanel...
- 计算机flash实训体会与收获,实训收获和心得体会300字
- Application 简介 常用方式
- Android 反射○
- 绕过kernel32自己实现WriteProcessMemory
- Exynos4412启动
- 网络安全行业的三大方向:为您的职业生涯做好准备