开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
Java4Compiler
/
src
/
fsm
/
FiniteStateMachine.java
Java4Compiler
/
src
/
fsm
/
FiniteStateMachine.java
FiniteStateMachine.java 4.10 KB
一键复制 编辑 原始数据 按行查看 历史
package fsm;
import inputSystem.Input;
import java.io.IOException;
/**
* @author Cherry
* @date 2022年1月21日
* @time 20:06
* @brief 有限状态机具体实现,用于判断输入的数是整型还是浮点数
*/
public class FiniteStateMachine {
private byte yylook; //预读取的字符
private int yyState = 0; //当前状态
private int yyNextState = FSM.STATUS_FAILURE; //下一个状态
private int yyPreState = FSM.STATUS_FAILURE; //前一个状态
private boolean endOfReads = false; //是否读完
FSMTable fsmTable = new FSMTable();
Input input = new Input();
FiniteStateMachine() throws IOException {
input.ii_newFile(null);
input.ii_advance(); //读取字符再放回去,这样使得缓冲区填满输入流中的数据
input.ii_pushback(); //指针在 0 处,方便后面的 lookahead
input.ii_mark_start();
}
/**
*
*/
public void yylex() {
while (true) {
if ((yylook = input.ii_lookahead(1)) != input.EOF) {
//yyNextState可能是换行符,换行符表示当前数据输入完成
yyNextState = fsmTable.yy_text(yyState, yylook);
} else {
endOfReads = true;
//if (yyPreState != FSM.STATUS_FAILURE) {
// yyNextState = FSM.STATUS_FAILURE;
//}
}
//如果下一个状态不是非法状态,则输出转换步骤,并 advance,准备读入下一个字符
if (yyNextState != FSM.STATUS_FAILURE) {
System.out.println("Transition from ST." + yyState + " to ST." + yyNextState
+ " Input char: " + (char)yylook);
yyPreState = yyState;
yyState = yyNextState;
input.ii_advance();
} else {
//在此标记一个单词结束(包含换行符'\n')
input.ii_mark_end();
//如果下一个字符是换行符'\n',则输入结束,判断数据类型
if (yylook == '\n') {
System.out.println("Accepting state: ST." + yyState);
//这里 ii_text() 不会输出后面的换行符'\n'
System.out.print("Line: " + input.ii_lineno() + ", accepting text: "
+ input.ii_text());
switch (yyState) {
case 1:
System.out.println(" -> Integer");
break;
case 2:
case 4:
System.out.println(" -> Float");
break;
default:
System.out.println("Unknown error!");
}
//若检测到换行符时,状态当前状态变为 -1,
//yyPreState = yyState;
//yyState = yyNextState;
} else {
//如果下一个状态不是换行符,则表示输入非法,进入错误状态流程
//首先判断是不是到了文件末尾,如果是文件末尾,直接结束即可
if (endOfReads) {
System.out.println("Done...");
return;
} else {
//如果不是文件末尾,将该字符串剩余部分全部读完,然后输出错误信息
input.ii_advance();
while ((yylook = input.ii_lookahead(1)) != '\n') {
input.ii_advance();
}
System.out.println("Line " + input.ii_lineno() + ": Input error!");
}
}
//状态机归位
//yyPreState = FSM.STATUS_FAILURE;
yyState = 0;
yyNextState = FSM.STATUS_FAILURE;
input.ii_advance();
input.ii_mark_start();
System.out.println();
}
}
}
public static void main(String[] args) throws IOException {
FiniteStateMachine fms = new FiniteStateMachine();
fms.yylex();
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

实现C语言的简易编译器,并将C语言转换成字节码运行在Java虚拟机中
取消

发行版

暂无发行版

贡献者

全部

语言

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Java
1
https://gitee.com/cherry05/Java4Compiler.git
git@gitee.com:cherry05/Java4Compiler.git
cherry05
Java4Compiler
Java4Compiler
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /