LR1文法全智能分析

// by  hfut yzk
#include "stdafx.h"
#include<fstream>
#include<string>
#include<map>
#include<vector>
#include<stack>
#include<set>
#include<cstring>
#include<queue>
using namespace std;#pragma region vars
struct xiangmu                                        //一个项目
{int nump;                                         //产生式编号int id;                                            //.的位置string fst;                                       //集合
};map<char,int>getnum;
char getchars[100];                                 //获得对应字符
vector<string>proce;                                //产生式
int table[30][30];                                   //预测分析表 -1
int tb_s_r[30][30];                                //是移进项还是规约项,-1,-2.
int num=0;int numvt=0;                             //numvt是终结符集合,0是‘#’,numvt表空字
string first[100];                                  //每个符号的first集
bool gotfirst[100];                                 //是否已经完成FIRST集合
string getp[100];                               //获得某终结符在左边的产生式集合
vector<vector<xiangmu> >v;                      //项目集族
int e[100][3];
int head[100];
int nume=0;                                     //链式前向星项目集族图fstream cin ("H:/课程设计/编译原理2015/lr(1)/in.txt");
fstream cout ("H:/课程设计/编译原理2015/lr(1)/out.txt");
fstream cout2 ("H:/课程设计/编译原理2015/lr(1)/out2.txt");
#pragma endregion#pragma region functions
void readin();
void getpp();
void dfsgetfirst(int nv,int nump);
void get_first();
void clear() ;
void addegde(int from,int to,int w)    ;
inline bool xmeq(xiangmu a,xiangmu b);
bool isin(xiangmu a,vector<xiangmu> b) ;                                //xm a is in xmji b
bool xmjieq(vector<xiangmu> a,vector<xiangmu> b) ;                       //两个项目集是否相等
vector<xiangmu>  hebing(vector<xiangmu>a ,vector<xiangmu>b) ;         //合并项目集 a,b 复给 a
int xmji_isin_xmjizu(vector<xiangmu>a,vector<vector<xiangmu> >b) ;     //查找项目集,若有,则返回编号,一举俩得
vector<xiangmu> get_close(xiangmu t)    ;                              //对项目 T作闭包
void get_xiangmujizu()        ;                                      //获得项目集族
void print_xmjizu()           ;                                     //打印项目集族
bool get_table();
void print_table();
void  print_now_state(int count,stack<int>state,stack<int>wd,int i);
bool analyze(); #pragma endregion/*******************************************读入vt,vn,编号1-num,读入所有产生式*********************************************/
void readin()
{memset(table,-1,sizeof(table));getnum['#']=0;getchars[0]='#';//cout<<"请输入所有终结符:"<<endl;char x;do{cin>>x;getnum[x]=++num;getchars[num]=x;}while(cin.peek()!='\n');numvt=++num;getnum['@']=numvt;        //kong zigetchars[num]=('@');// cout<<"请输入非终结符集:"<<endl;do{cin>>x;getnum[x]=++num;getchars[num]=x;}while(cin.peek()!='\n');//   cout<<"输入所有产生式(空字用‘@’表示),以‘end’结束:"<<endl;string pro;while(cin>>pro&&pro!="end"){string ss;ss+=pro[0];for(int i=3;i<pro.size();i++){if(pro[i]=='|'){proce.push_back(ss);ss.clear();ss+=pro[0];}else{ss+=pro[i];}}proce.push_back(ss);}
}void getpp()
{for(int i=0;i<proce.size();i++){int temp=getnum[proce[i][0]];getp[temp]+=char('0'+i);}
}/****************************************************获得first集************************************************************/
void dfsgetfirst(int nv,int nump)                            //当前的符号,和对应产生式编号
{int temp=getnum[proce[nump][1]];                           //产生式推出来的首符gotfirst[nump]=1;                                        //标记if(temp<=numvt)first[nv]+=char('0'+temp);                //是终结符else{for(int i=0;i<getp[temp].size();i++)                //所有temp可以推出来的符号对应的产生式{if(proce[nump][0]==proce[nump][1])continue;   //左递归的产生式不用不影响求fisrt集dfsgetfirst(temp,getp[temp][i]-'0');}first[nv]+=first[temp];                               //回溯时候沿途保存}
}
void get_first()
{for(int i=1;i<=numvt;i++)                                         //    终结符first集合是它自己.{first[i]=char('0'+i);}for(int i=0;i<proce.size();i++){if(proce[i][0]==proce[i][1])continue; //左递归的产生式不用不影响求fisrt集if(gotfirst[i])continue;              //已经生成。int temp=getnum[proce[i][0]];dfsgetfirst(temp,i);}
}
/***************************************************添加边*****************************************************************/
void addegde(int from,int to,int w)
{e[nume][0]=to;e[nume][1]=head[from];head[from]=nume;e[nume++][2]=w;
}
/******************************************************初始化函数*********************************************************/
void clear()
{for(int i=0;i<100;i++)head[i]=-1;for(int i=0;i<30;i++)for(int j=0;j<30;j++)tb_s_r[i][j]=table[i][j]=-1;nume=0;
}/******************************************************获得项目集族*******************************************************/
inline bool xmeq(xiangmu a,xiangmu b)
{if(a.fst==b.fst&&a.id==b.id&&a.nump==b.nump)return 1;return 0;
}bool isin(xiangmu a,vector<xiangmu> b)      //xm a is in xmji b
{for(int i=0;i<b.size();i++){if(xmeq(a,b[i]))return 1;}return 0;
}vector<xiangmu>  hebing(vector<xiangmu>a ,vector<xiangmu>b)  //合并项目集 a,b 复给 a
{for(int i=0;i<b.size();i++){if(isin(b[i],a))continue;elsea.push_back(b[i]);}return a;
}bool xmjieq(vector<xiangmu> a,vector<xiangmu> b)  //两个项目集是否相等
{if(a.size()!=b.size())return 0;for(int i=0;i<a.size();i++){if(!isin(a[i],b))return 0;}return 1;
}int xmji_isin_xmjizu(vector<xiangmu>a,vector<vector<xiangmu> >b)  //查找项目集,若有,则返回编号,一举俩得
{for(int i=0;i<b.size();i++){if(xmjieq(a,b[i]))return i;}return -1;
}vector<xiangmu> get_close(xiangmu t)                                      //对项目 T作闭包
{vector<xiangmu> temp;temp.push_back(t);queue<xiangmu> q;                                                 //bfs完成闭包q.push(t);while(!q.empty()){xiangmu cur=q.front();q.pop();if(cur.id==proce[cur.nump].size())                            //归约项舍去continue;int tt=getnum[proce[cur.nump][cur.id]];                             //tt is thm num of '.'zhihoudefuhaoif(tt<=numvt)   continue ;                                    //若是终结符,则不必找了for(int i=0;i<getp[tt].size();i++)                           //对应产生式的编号{xiangmu c;c.id=1;                               //c.nump=getp[tt][i]-'0';             //if(proce[cur.nump].size()-cur.id==1)                       // the last : A->BC.D,a/bc.fst+=cur.fst;else                                                   //not the last  :A->B.CFb,a/b{int tttnum=getnum[proce[cur.nump][cur.id+1]];c.fst+=first[tttnum];}if(!isin(c,temp))                                       //排重,新的项目就加入。{q.push(c);temp.push_back(c);}}}return temp;
}void get_xiangmujizu()             //获得项目集族
{vector<xiangmu>temp;xiangmu t;t.nump=0;t.id=1;t.fst+='0';    //初始的项目集:0temp=get_close(t);queue<vector<xiangmu> >q;        //bfs法获得q.push(temp);v.push_back(temp);             //第一个入while(!q.empty()){vector<xiangmu> cur=q.front();q.pop();for(int i=1;i<=num;i++)     //所有符号{if(i==numvt)continue;      //'#'vector<xiangmu> temp;for(int j=0;j<cur.size();j++)     //该项目集中的所有项目{if(cur[j].id==proce[cur[j].nump].size())continue;  //是规约项目,无法再读入了int tt=getnum[proce[cur[j].nump][cur[j].id]];if(tt==i)                                          //can read in 符号i{xiangmu tempt;tempt.fst=cur[j].fst;tempt.id=cur[j].id+1;tempt.nump=cur[j].nump;temp=hebing(temp,get_close(tempt));}}if(temp.size()==0)continue;             //该符号无法读入。int numcur=xmji_isin_xmjizu(cur,v);   //当前节点标号int tttnum=xmji_isin_xmjizu(temp,v);  //新目标标号if(tttnum==-1)                    //新的项目集{v.push_back(temp);q.push(temp);addegde(numcur,v.size()-1,i) ;   //添加边,权为读入的符号}else                             //老的项目集{addegde(numcur,tttnum,i);}}}
}/************************************************项目集族打印*********************************************************/
void print_xmjizu()              //打印项目集族
{for(int i=0;i<v.size();i++){cout<<"项目集"<<i<<":"<<endl;for(int j=0;j<v[i].size();j++){cout<<proce[v[i][j].nump]<<" "<<v[i][j].id<<" "<<v[i][j].fst<<endl;}cout<<endl;}for(int i=0;i<v.size();i++){for(int j=head[i];j!=-1;j=e[j][1]){cout<<"  "<<getchars[e[j][2]]<<endl;cout<<i<<"--->"<<e[j][0]<<endl;}}
}/*********************************获得LR1分析表*************************************************************************/
bool get_table()                                              //获得分析表table[i][j]=w:状态i-->j,读入符号W。
{for(int i=0;i<v.size();i++)                                //遍历图{for(int j=head[i];j!=-1;j=e[j][1]){if(table[i][e[j][2]]!=-1)return 0;                    //多重入口,报错.table[i][e[j][2]]=e[j][0];tb_s_r[i][e[j][2]]=-1;                              //移近项-1。}}for(int i=0;i<v.size();i++)                                //遍历所有项目{for(int j=0;j<v[i].size();j++){if(v[i][j].id==proce[v[i][j].nump].size())                  //归约项{for(int k=0;k<v[i][j].fst.size();k++){if(table[i][(v[i][j].fst)[k]-'0']!=-1)return 0;           //多重入口,报错.if(  (v[i][j].fst)[k]=='0'&&v[i][j].nump==0)table[i][(v[i][j].fst)[k]-'0']=-3 ;           //接受态。else{table[i][(v[i][j].fst)[k]-'0']=v[i][j].nump;tb_s_r[i][(v[i][j].fst)[k]-'0']=-2;            //归约态}}}}}return 1;
}void print_table()
{// cout<<"LR(1)分析表:"<<endl;//  cout<<"状态   "<<"         actoin     "<<endl;cout<<num<<" "<<v.size()<<endl;for(int j=0;j<=num;j++){if(j==numvt)continue;cout<<"    "<<getchars[j];}cout<<endl;for(int i=0;i<v.size();i++){cout<<i<<"   ";for(int j=0;j<=num;j++){if(j==numvt)continue;if(j<numvt){if(table[i][j]==-3)     cout<<"acc"<<"  ";               //接受else if(table[i][j]==-1)cout<<"X  ";                       //空else if(tb_s_r[i][j]==-1)cout<<"s"<<table[i][j]<<"   ";  //移近else if(tb_s_r[i][j]==-2)cout<<"r"<<table[i][j]<<"   ";  //归约}else {if(table[i][j]==-3)     cout<<"acc"<<"  ";               //接受else if(table[i][j]==-1)cout<<"X  ";                       //空else if(tb_s_r[i][j]==-1)cout<<""<<table[i][j]<<"   ";  //移近else if(tb_s_r[i][j]==-2)cout<<""<<table[i][j]<<"   ";  //归约}}cout<<endl;}}string word;
void  print_now_state(int count,stack<int>state,stack<int>wd,int i)
{cout2<<count<<'\t'<<'\t';stack<int>temp;while(!state.empty()){temp.push(state.top());state.pop();}while(!temp.empty()){cout2<<temp.top();temp.pop();}cout2<<'\t'<<'\t';while(!wd.empty()){temp.push(wd.top());wd.pop();}while(!temp.empty()){cout2<<getchars[temp.top()];temp.pop();}cout2<<'\t'<<'\t';for(int j=i;j<word.size();j++)cout2<<word[j];cout2<<'\t'<<'\t';
}/*********************************************分析程序**************************************************************/
bool analyze()
{cout2<<"       "<<word<<"的分析过程"<<endl;cout2<<"步骤\t\t"<<"状态栈\t\t"<<"符号栈\t\t"<<"输入串\t\t"<<"动作说明"<<endl;stack<int>state;   //俩个栈:状态栈和符号栈stack<int>wd;int count=0;state.push(0);     //初始化wd.push(0);        //'#'for(int i=0;;)       //i,读入文本的{int cur=state.top();if(table[cur][getnum[word[i]]]==-1)    // 空白,报错误return 0;if(table[cur][getnum[word[i]]]==-3)  //接受态{print_now_state(count++,state,wd,i);cout2<<"      恭喜!acc!"<<endl;return 1;}if(tb_s_r[cur][getnum[word[i]]]==-1)       //移进项{print_now_state(count++,state,wd,i);int newstate=table[cur][getnum[word[i]]];cout2<<"action["<<cur<<","<<getnum[word[i]]<<"]="<<newstate;cout2<<",状态"<<newstate<<"入栈"<<endl;wd.push(getnum[word[i]]);state.push(newstate);i++;}else if(tb_s_r[cur][getnum[word[i]]]==-2)         //归约{print_now_state(count++,state,wd,i);int numpro=table[cur][getnum[word[i]]];   //用该产生式归约int len=proce[numpro].size()-1;for(int ii=0;ii<len;ii++)                 //弹栈{wd.pop();state.pop();}wd.push(getnum[proce[numpro][0]]);    //新入int cur=state.top();cout2<<"用"<<proce[numpro][0]<<"->";for(int ii=1;ii<=len;ii++)cout2<<proce[numpro][ii];cout2<<"进行归约,"<<"goto["<<cur<<","<<getnum[word[i]]<<"]="<<table[cur][getnum[proce[numpro][0]]];cout2<<"入栈"<<endl;state.push(table[cur][getnum[proce[numpro][0]]]);}}return 1;
}int _tmain(int argc, _TCHAR* argv[])
{clear();readin();getpp();get_first();get_xiangmujizu();if(!get_table()){// cout<<"此文法在生成分析表时候有多重入口,非LR(1)文法!"<<endl;cout<<-1<<endl;return 0;}// print_xmjizu();print_table();//cout<<"请输入字:"<<endl;cin>>word;word+='#';if(!analyze())cout2<<"error!"<<endl;else;return 0;
}
import java.util.*;import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.GeneralPath;
import java.lang.Thread;
import java.lang.Runnable;public class LR1  extends JFrame
{JButton go_table;JButton go_ana;public LR1()  throws Exception                                                       //初始化构造函数{setBounds(0, 0, 1380, 800);                                                      //设定大小   this.setBackground(Color.WHITE);                                         //背景色    this.setTitle("LR(1)文法分析");this.setLayout(null);readin();JLabel title= new JLabel("LR1   文   法   分   析",JLabel.CENTER);     title.setFont(new Font("长城行楷体", Font.BOLD, 80));               //标签相关设置title.setForeground(new Color(0,0,0));title. setBounds(0,0,1380,100); add(title); go_table=new JButton("LR1分析表=>");go_ana=new JButton("LR1分析器=>");go_table.setBounds(700, 150, 400, 100);go_ana.setBounds(700, 400, 400, 100);Font f=new Font("长城行楷体",Font.BOLD,40);go_table.setFont(f);go_ana.setFont(f);go_table.addActionListener(new presslistener1());go_ana.addActionListener(new presslistener2());add(go_table);add(go_ana);this.setVisible(true);}void readin()throws Exception {java.io.File file= new java.io.File("H:/课程设计/编译原理2015/lr(1)/in.txt");                      //读入数据Scanner input =new Scanner(file); JLabel vt= new JLabel("终结符:");     vt.setFont(new Font("长城行楷体", Font.BOLD, 20));               //标签相关设置vt.setOpaque(true);vt.setForeground(new Color(0,0,0));vt. setBounds(0,100,200,50); add(vt); String ss=input.nextLine();JTextField temp0=new JTextField(ss);temp0. setBounds(0,150,500,50);temp0.setFont(new Font("长城行楷体", Font.BOLD, 15));this.add(temp0);JLabel vn= new JLabel("非终结符:");     vn.setFont(new Font("长城行楷体", Font.BOLD, 20));               //标签相关设置vn.setOpaque(true);vn.setForeground(new Color(0,0,0));vn. setBounds(0,200,200,50); add(vn); ss=input.nextLine();JTextField temp1=new JTextField(ss);temp1. setBounds(0,250,500,50);temp1.setFont(new Font("长城行楷体", Font.BOLD, 15));this.add(temp1);JLabel pro= new JLabel("产生式:   ");     pro.setFont(new Font("长城行楷体", Font.BOLD, 20));               //标签相关设置pro.setOpaque(true);pro.setForeground(new Color(0,0,0));pro. setBounds(0,300,200,50); add(pro); int cnt=0;do{ss=input.next();if(ss.equals("end"))break;JTextField temp=new JTextField(ss);temp. setBounds(0,350+cnt*50,500,50);temp.setFont(new Font("长城行楷体", Font.BOLD, 15));this.add(temp);      cnt++;}while(true);    }class  presslistener1 implements ActionListener  {  public void actionPerformed(ActionEvent e)  {  //LR1.this .setVisible(false);  try {show_table mytable =new show_table();} catch (Exception e1) {e1.printStackTrace();}}     }  class  presslistener2 implements ActionListener  {  public void actionPerformed(ActionEvent e)  {  //LR1.this .setVisible(false);  try {show_ana mytable =new show_ana();} catch (Exception e1) {e1.printStackTrace();}}     }  }
import java.util.*;
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.GeneralPath;
import java.lang.Thread;
import java.lang.Runnable;public class show_ana extends JFrame  {int col;int row;public show_ana()  throws Exception{setBounds(0, 0, 1380, 800);                                                        //设定大小   this.setBackground(Color.WHITE);                                          //背景色    this.setTitle("LR(1)文法分析过程");this.setLayout(null);readin();this.setVisible(true); }public void readin ()throws Exception                                       //读入图函数{    java.io.File file= new java.io.File("H:/课程设计/编译原理2015/lr(1)/out2.txt");                      //读入数据Scanner input =new Scanner(file);   String ss=input.next();/*  JLabel table= new JLabel(ss,JLabel.CENTER);     table.setFont(new Font("长城行楷体", Font.BOLD, 20));               //标签相关设置table.setOpaque(true);table.setForeground(new Color(0,0,0));table. setBounds(0,0,1380,50); add(table); */col=5;row=100;int curcol=1380/col;int currow=25;for(int i=0;i<col;i++){JTextField temp=new JTextField(input.next());temp. setBounds(1380/col*i,50,curcol,currow);temp.setFont(new Font("长城行楷体", Font.BOLD, 15));this.add(temp);}for(int i=0;i<row;i++)for(int j=0;j<col;j++){if(!input.hasNext()){i=1000;break;} String s= input.next();JTextField temp=new JTextField(s);temp. setBounds(1380/col*j,50+(i+1)*currow,curcol,currow);   temp.setFont(new Font("长城行楷体", Font.BOLD, 15));this.add(temp);}input.close(); }
}
import java.util.*;
import javax.swing.*;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.GeneralPath;
import java.lang.Thread;
import java.lang.Runnable;public class show_table  extends JFrame  {int col;int row;public show_table()  throws Exception{setBounds(0, 0, 1380, 800);                                                      //设定大小   this.setBackground(Color.WHITE);                                           //背景色    this.setTitle("LR(1)文法分析");this.setLayout(null);readin();this.setVisible(true); }public void readin ()throws Exception                                       //读入图函数{    JLabel table= new JLabel(" 状态                                                                                          ACTION                                                            GO                            ");     table.setFont(new Font("长城行楷体", Font.BOLD, 20));               //标签相关设置table.setOpaque(true);table.setForeground(new Color(0,0,0));table. setBounds(0,0,1380,50); add(table); java.io.File file= new java.io.File("H:/课程设计/编译原理2015/lr(1)/out.txt");                      //读入数据Scanner input =new Scanner(file);    col=input.nextInt();col++;row=input.nextInt();int curcol=1380/col;int currow=600/row;if(col==-1)             //多重入口{JOptionPane.showMessageDialog(null, "此文法在生成分析表时候有多重入口,非LR(1)文法!");System.out.println("此文法在生成分析表时候有多重入口,非LR(1)文法!\n");return ;                                   }JTextField temp0=new JTextField();temp0. setBounds(0,50,curcol,currow);this.add(temp0);for(int i=0;i<col-1;i++){JTextField temp=new JTextField(input.next());temp. setBounds(1380/col*(i+1),50,curcol,currow);temp.setFont(new Font("长城行楷体", Font.BOLD, 15));this.add(temp);}for(int i=0;i<row;i++)for(int j=0;j<col;j++){String s= input.next();if(s.equals("X"))s="";JTextField temp=new JTextField(s);temp. setBounds(1380/col*j,50+(i+1)*currow,curcol,currow);    temp.setFont(new Font("长城行楷体", Font.BOLD, 15));this.add(temp);}input.close(); }
}
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.GeneralPath;
import java.lang.Thread;
import java.lang.Runnable;
public class start {public static void main(String[] args) throws Exception{LR1 lr1= new LR1();//show_table mytable =new show_table();//  show_ana myana= new show_ana();}}

LR(1)文法智能分析相关推荐

  1. lr(0)文法的判断与分析 python_怎么判断一个文法是LR(0)

    展开全部 LR(0)分析就是LR(K)分析当K=0的情况,32313133353236313431303231363533e78988e69d8331333431366431亦即在分析的每一步,只要根 ...

  2. 自下而上的语法分析——LR(0)和SLR分析

    借助于一个栈,可以将这种方法简化为"移进-规约分析": 从左向右逐个扫描待分析的单词符号串,并将串中单词一个一个地移入栈中,边移入边分析:每当栈顶符号串形成了所给文法的某个产生式右 ...

  3. 基于OpenVINO与PP-Strucutre的文档智能分析 - 飞桨AI Studio

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 基于OpenVINO与PP-Strucutre的文档智能分析 本示例包含以下部分组成: 项目说明 ...

  4. SLR(1),LALR(1),LR(1)文法的区别

    三个文法的简单介绍 SLR(1) SLR(1)的使用条件 SLR(1)带来的问题 LR(1) 向前搜索符的构造 LR(1)的问题 LALR(1) LALR(1)的问题 SLR(1) SLR(1):简单 ...

  5. 实验四 LR(0)分析方法的设计与实现 (8学时)

    实验四 LR(0)分析方法的设计与实现(8学时) 一.实验目的 通过LR分析方法的实现,加深对自下而上语法分析方法及语法分析程序自动生成过程的理解. 二.实验要求 输入上下文无关文法,对给定的输入串, ...

  6. 全国“最高”的视觉竞赛,华为Atlas打通遥感图像智能分析任督二脉

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 地图是我们每天都离不开的手机应用,无论打车.外卖都离不开地图数据的支持. 地图数据又离不开遥感技术.通过飞机.无人机.卫星拍摄的大量照片应 ...

  7. 5G NGC — NWDAF 网络智能分析功能

    目录 文章目录 目录 基于 NWDAF 的网络智能化提升 R16 eNA 基于 NWDAF 的网络智能化提升 3GPP 在 5G 标准制定之初,就考虑将人工智能与网络大数据分析技术融合应用于 5G 网 ...

  8. 基于深度学习和机器学习的心电图智能分析参赛总结

    文章目录 前言 一.参赛经过 二.深度学习算法 1.网络结构 2.数据处理 3.训练和调参 三.机器学习算法 1.特征构造 2.训练 四.结果及讨论 前言   2019年夏天我参加了清华大学主办的首届 ...

  9. .net函数查询_特来电智能分析平台动态查询架构创新实践

    一.业务背景及痛点 目前主流互联网智能分析平台中,数据查询作为基础的设施服务支撑着基础数据及业务分析的功能展现.随着数据量的增长,数据存储方式多元化,相对静态数据可能存储到关系型数据库中,订单类动态数 ...

最新文章

  1. 面试官:哪些原因会导致JAVA进程退出?
  2. 预备作业02 20162320刘先润
  3. Mysql数据库误删除数据恢复成功
  4. KubeVela + KEDA:为应用带来“与生俱来”的弹性伸缩能力
  5. ‘FactorAnalyzer‘ object has no attribute ‘analyze‘和fa.loadings改成fa.loadings报错解决
  6. ROS+雷达 运行数据记录
  7. Fiddler Everywhere全平台抓包调试工具安装和使用(一)
  8. 解剖SQLSERVER 第六篇 对OrcaMDF的系统测试里避免regressions(译)
  9. 北京地铁规划大全(图),买房子可以参考一下
  10. 开发一个手游需要的工种
  11. OC_键值编码KVC(Key-Value Coding)
  12. fedora linux五笔输入法,ArchLinux 安装五笔输入法
  13. snmp中的MIB主要节点含义
  14. MATLAB 神经网络NAR时间序列做预测
  15. 质量码——工业互联网平台入口
  16. vue上传excel并展示_(一)vue导入上传excel功能
  17. 曾仕强:领导最在乎什么?
  18. 两年JAVA经验,非科班菜鸡的我是如何拿下字节、美团、腾讯等offer的?吃透这份面经,大厂不再是梦!
  19. 【java反射】简单说说静态代理和动态代理
  20. 蓝海卓越计费管理系统 debug.php 远程命令执行漏洞

热门文章

  1. wallpapers
  2. 找回浏览器记住的密码
  3. jupyter 改注释字体_Jupyter Notebook主题字体设置及自动代码补全
  4. 瑞芯微RK3568开发板深度评测
  5. 容我喝一杯82年java_开罐即食哦,当土豪只剩一双手时,奋豆只想喝杯82年白开水压压惊...
  6. 使用Python+OpenCV实现在视频中某对象后添加图像
  7. 怎么在终端卸载mysql_mysql 的卸载、再安装与常用命令
  8. vue+elementui+quill富文本框实现(富文本框最大化和最小化)
  9. Roofline Model与深度学习模型的性能分析
  10. linux thinkphp 计划任务_Linux之计划任务