#ifndef MINECRAFT_H
#define MINECRAFT_H
#include<bits/stdc++.h>
using namespace std;
#define bdsw short//被动生物 
#define zlsw int//中立生物 
#define ddsw long long//敌对生物 
#define cssmz unsigned int//
#define zdsmz unsigned long//
#define zqsmz unsigned long long//
#define scgl_d float//生成概率_大 
#define scgl_z double//生成概率_中 
#define scgl_x long double// 生成概率_小
#define zcq bool//侦测器 
#define dfk char//
#define dufk string//
#define yrcdkj using namespace std//引入存档空间 
#define ss cout<<//受伤 
#define zl cin>>//治疗 
#define ddgdxz endl//到达高度限制 
#define fk const// 
#define TNT break//TNT炸药 
#define tyys continue//
#define fhbhs return//返回庇护所 
zsd(int a,int b)//钻石多函数  
{
	return max(a,b);
}
zss(int c,int d)//钻石少函数  
{
	return min(c,d);
}
#endif

注:暂未编辑完毕(我想开个新语言)

1 comments

  • @ 2026-2-5 15:08:31
    #include<bits/stdc++.h>
    using namespace std;
    typedef void(*rs)();
    int varnum;
    long long *ram;
    int a,b,c;
    string jph;
    int index=1;
    vector<string>code;
    vector<string>sduc;
    unordered_map<string,rs>keywords;
    unordered_map<string,stack<int> >var;
    unordered_map<string,int>jpd;
    unordered_map<string,int>funname;
    unordered_map<string,vector<string>>funin;
    void runcode(vector<string>&sduc){
    	if(!sduc.size()||sduc[0][0]==':'||sduc[0][0]=='#') return;
    	try{
    		if(keywords[sduc[0]]==0) throw runtime_error("\'"+sduc[0]+"\' is not define!");
    		keywords[sduc[0]]();
    	}catch(const runtime_error &e){
    		cout<<"Catch a error:"<<e.what()<<"on line "<<index<<'\n';
    	}catch (...){
    		cout<<"On line"<<index<<",have unknown error\n"<<'\n';
    	}
    }
    int gein(string s){return ('0'<=s[0]&&s[0]<='9')||s[0]=='-'?atoi(s.c_str()):var[s].top();}
    vector<string> opencode(string x);
    void fp() {a=atoi(sduc[1].c_str());ram=new long long[a];for(int i=0;i<a;i++)ram[i]=0;}
    void mov() {a=gein(sduc[1].c_str()),b=gein(sduc[2].c_str());ram[a]=ram[b];}
    void mio() {a=gein(sduc[1].c_str()),b=atoi(sduc[2].c_str());ram[a]=b;}
    void add() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]+ram[b];}
    void sub() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]-ram[b];}
    void tim() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]*ram[b];}
    void div() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]/ram[b];}
    void mod() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]%ram[b];}
    void _and() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]&ram[b];}
    void _or() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]|ram[b];}
    void _compl() {a=gein(sduc[1].c_str());ram[a]=~ram[a];}
    void _xor() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]^ram[b];}
    void rmv() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]>>ram[b];}
    void lmv() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=ram[a]<<ram[b];}
    void jmp() {jph=sduc[1];index=jpd[jph];}
    void _if() {a=gein(sduc[1].c_str());ram[a]&1?:index++;}
    void ext() {cout<<"\ncode exit\n";system("pause");exit(0);}
    void put() {for(size_t i=1;i<sduc.size();i++) a=gein(sduc[i].c_str()),cout<<ram[a];}
    void get() {for(size_t i=1;i<sduc.size();i++) a=gein(sduc[i].c_str()),cin>>ram[a];}
    void putc() {for(size_t i=1;i<sduc.size();i++) a=gein(sduc[i].c_str()),cout<<(char)ram[a];}
    void getc() {char c;for(size_t i=1;i<sduc.size();i++) a=gein(sduc[i].c_str()),cin>>c,ram[a]=c;}
    void sam() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=(ram[a]==ram[b]);}
    void gre() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=(ram[a]>ram[b]);}
    void les() {c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=(ram[a]<ram[b]);}
    void _for(){
    	int a=gein(sduc[1].c_str()),b=gein(sduc[2].c_str()),c=gein(sduc[3].c_str());
    	index++;
    	const int temp=index;
    	for(ram[a]=ram[b];ram[a]<=ram[c];ram[a]++){
    		while(1){
    			sduc=opencode(code[index]);
    			if(sduc[0]=="end"){if(ram[a]<ram[c]) index=temp;break;}
    			runcode(sduc);
    			index++;
    		}
    	}
    	return;
    }
    void forn(){
    	int a=gein(sduc[1].c_str()),b=atoi(sduc[2].c_str()),c=gein(sduc[3].c_str());
    	index++;
    	const int temp=index;
    	for(ram[a]=b;ram[a]<=ram[c];ram[a]++){
    		while(1){
    			sduc=opencode(code[index]);
    			if(sduc[0]=="end"){if(ram[a]<ram[c]) index=temp;break;}
    			runcode(sduc);
    			index++;
    		}
    	}
    	return;
    }
    void _while(){
    	int a=gein(sduc[1].c_str());
    	index++;
    	const int temp=index;
    	while(ram[a]){
    		while(1){
    			sduc=opencode(code[index]);
    			if(sduc[0]=="end"){if(ram[a]) index=temp;break;}
    			runcode(sduc);
    			index++;
    		}
    	}
    	return;
    }
    void add_var(){for(size_t i=1;i<sduc.size();i++)var[sduc[i]].push(++varnum);}
    void _max(){int c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=max(ram[a],ram[b]);}
    void _min(){int c=gein(sduc[1].c_str()),a=gein(sduc[2].c_str()),b=gein(sduc[3].c_str());ram[c]=min(ram[a],ram[b]);}
    void def(){
    	string name=sduc[1];funname[name]=index;
    	int inps=atoi(sduc[2].c_str());
    	for(int i=1;i<=inps;i++){
    		string inp=sduc[i+2];
    		funin[name].push_back(inp);
    	}
    	while(1){
    		sduc=opencode(code[index]);
    		if(sduc[0]=="endf") break;
    		index++;
    	}
    }
    void run(){
    	string name=sduc[1];
    	int inps=funin[name].size(),temp=index,inp;
    	for(int i=0;i<inps;i++) inp=gein(sduc[i+2].c_str()),var[funin[name][i]].push(++varnum),ram[varnum]=ram[inp];
    	index=funname[name]+1;
    	while(1){
    		sduc=opencode(code[index]);
    		if(sduc[0]=="endf"||sduc[0]=="return"){
    			for(int i=0;i<inps;i++) var[funin[name][i]].pop(),varnum--;
    			break;
    		}
    		runcode(sduc);
    		index++;
    	}
    	index=temp;
    }
    inline void init() {
    	keywords["fp"]=fp;
    	keywords["var"]=add_var;
    	keywords["mio"]=mio;
    	keywords["mov"]=mov;
    	keywords["add"]=add;
    	keywords["sub"]=sub;
    	keywords["tim"]=tim;
    	keywords["div"]=div;
    	keywords["mod"]=mod;
    	keywords["and"]=_and;
    	keywords["or"]=_or;
    	keywords["compl"]=_compl;
    	keywords["xor"]=_xor;
    	keywords["rmv"]=rmv;
    	keywords["lmv"]=lmv;
    	keywords["jmp"]=jmp;
    	keywords["sam"]=sam;
    	keywords["gre"]=gre;
    	keywords["les"]=les;
    	keywords["if"]=_if;
    	keywords["put"]=put;
    	keywords["get"]=get;
    	keywords["putc"]=putc;
    	keywords["getc"]=getc;
    	keywords["ext"]=ext;
    	keywords["for"]=_for;
    	keywords["forn"]=forn;
    	keywords["while"]=_while;
    	keywords["max"]=_max;
    	keywords["min"]=_min;
    	keywords["def"]=def;
    	keywords["run"]=run;
    	return;
    }
    vector<string> opencode(string x) {
    	vector<string>ret;
    	string s;
    	for(char i:x)
    		if(i==' ') ret.push_back(s),s="";
    		else s=s+i;
    	ret.push_back(s);
    	return ret;
    }
    int main(int argc, char* argv[]) {
    	init();
    	string path,s;
    	if(argc>1) path=argv[1];
    	else cin>>path;
    	system("cls");
    	ifstream dim(path.c_str());
    	code.push_back("");
    	int line=0;
    	while(getline(dim,s)) {
    		line++;
    		code.push_back(s);
    		if(s[0]==':') jpd[s.substr(1)]=line;
    	}
    	for(;index<(int)code.size();index++) runcode(sduc=opencode(code[index]));
    	return 0;
    }
    
    fp 10
    var a b mod ans _2
    def pow 3 a b mod
    var is
    while b
    mod is b _2
    if is
    tim ans ans a
    #
    div b b _2
    tim a a a
    mod ans ans mod
    mod a a mod
    end
    endf
    mio _2 2
    mio ans 1
    get a b mod
    run pow a b mod
    put ans
    ext
    
  • 1