package java_project;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class MyMain{
Set<String> keyWordsSet = new HashSet<String>();
Set<String> operatorSet = new HashSet<String>();
Set<String> separatorSet= new HashSet<String>();
String fileStr = "",currentStr="";
int index = -1;
public static void main(String[] args){
MyMain my = new MyMain();
MyUtil.readProgram();
my.initSets();
my.readFile();
my.start();
}
private void start(){
for(int i=0;i<fileStr.length();i++){
currentStr = "";
String s = fileStr.charAt(i)+"";
index = i;
if(Character.isLetter(fileStr.charAt(i))||s.equals("_")){
dealLetter();
}else if(Character.isDigit(fileStr.charAt(i))){
dealDigit();
}else if(separatorSet.contains(s)){
dealSeparator();
}else if(operatorSet.contains(s)||s.equals("!")){
dealOperator();
}
i = index;
}
}
/**
* 初始化集合
*/
private void initSets(){
String keyWords[] = {"if","int","for","while","do","return","break","continue"};
keyWordsSet.addAll(Arrays.asList(keyWords));
String operators[] = {"+","-","*","/","=",">","<",">=","<=","!="};
operatorSet.addAll(Arrays.asList(operators));
String separators[] = {",",";","{","}",")","("};
separatorSet.addAll(Arrays.asList(separators));
}
/**
* 初始化需要读取的程序文件
*/
private void readFile(){
try {
InputStreamReader reader = new InputStreamReader(new FileInputStream("jc.c"));
int temp;
while((temp=reader.read())!=-1)
fileStr+=((char)temp);
} catch (Exception e){}
}
private void dealLetter(){
currentStr+=fileStr.charAt(index);
for(int i=index+1;i<fileStr.length();i++){
String s = fileStr.charAt(i)+"";
index = i;
if(s.equals("_")||Character.isLetterOrDigit(fileStr.charAt(i))){
currentStr+=fileStr.charAt(i);
}else{
break;
}
}
index--;
if(keyWordsSet.contains(currentStr)){
System.out.println("(1,"+"\""+currentStr+"\")");
}else{
System.out.println("(2,"+"\""+currentStr+"\")");
}
}
private void dealDigit(){
currentStr+=fileStr.charAt(index);
for(int i=index+1;i<fileStr.length();i++){
index = i;
if(Character.isDigit(fileStr.charAt(i))){
currentStr+=fileStr.charAt(i);
}else{
break;
}
}
index--;
System.out.println("(3,"+"\""+currentStr+"\")");
}
private void dealSeparator() {
currentStr+=fileStr.charAt(index);
System.out.println("(5,"+"\""+currentStr+"\")");
}
private void dealOperator(){
currentStr = fileStr.charAt(index)+"";
if(index+1<fileStr.length()){
String s1 = fileStr.charAt(index)+"";
s1 += fileStr.charAt(index+1)+"";
if(operatorSet.contains(s1)){
System.out.println("(4,"+"\""+s1+"\")");
index++;
}else{
System.out.println("(4,"+"\""+currentStr+"\")");
}
}else{
System.out.println("(4,"+"\""+currentStr+"\")");
}
}
}
潘建成
- 粉丝: 139
- 资源: 82
最新资源
- 基于java+ssm+mysql的校园跑腿管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的线上学习平台系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的校园事务自助指南服务系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的校园失物招领网站 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的校园综合服务系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的学生宿舍管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的星巴克咖啡店管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的学生宿舍门禁信息管理系统 源码+数据库+论文(高分毕设项目).zip
- spingboot jsp 整合 sginatrue签名验签技术,防止参数篡改,提高数据安全性
- 基于java+ssm+mysql的疫情管理系统 源码+数据库+论文(高分毕设项目).zip
- Qt 5.14 Modbus RTU源码解析:主从通信模式与数据传输流程,qt5.14.modbus rtu源码,运行无问题 -Modbus具有两种串行传输模式:分别为ASCII和RTU 此源
- 基于java+ssm+mysql的医药信息管理系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的学生宿舍维修服务平台 源码+数据库+论文(高分毕设项目).zip
- 基于主从博弈的电热综合能源系统动态定价策略与能量管理优化模型,MATLAB代码:基于主从博弈的电热综合能源系统动态定价与能量管理 关键词:主从博弈 电热综合能源 动态定价 能量管理 参考文档:自
- 基于java+ssm+mysql的玉安农副产品销售系统 源码+数据库+论文(高分毕设项目).zip
- 基于java+ssm+mysql的影视创作论坛 源码+数据库+论文(高分毕设项目).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈