-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathdice.min.js
executable file
·1 lines (1 loc) · 15.1 KB
/
dice.min.js
1
var dice=function(){var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[2,19],$V1=[1,3],$V2=[1,4],$V3=[1,5],$V4=[1,6],$V5=[1,8],$V6=[1,9],$V7=[1,10],$V8=[1,11],$V9=[1,12],$Va=[1,13],$Vb=[1,14],$Vc=[5,6,8,9,10,11,13,14,17],$Vd=[5,6,7,8,9,10,11,12,13,14,17],$Ve=[5,6,7,8,9,10,11,13,14,17],$Vf=[5,6,7,13,14,17],$Vg=[5,6,7,8,9,13,14,17],$Vh=[5,6,7,8,9,10,13,14,17];var parser={trace:function trace(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"+":6,"-":7,"*":8,"/":9,"^":10,"%":11,D:12,H:13,L:14,F:15,"(":16,")":17,NUMBER:18,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"+",7:"-",8:"*",9:"/",10:"^",11:"%",12:"D",13:"H",14:"L",15:"F",16:"(",17:")",18:"NUMBER"},productions_:[0,[3,2],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,2],[4,5],[4,5],[4,3],[4,2],[4,5],[4,5],[4,3],[4,2],[4,3],[4,1],[4,0]],performAction:function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$){var $0=$$.length-1;switch(yystate){case 1:return $$[$0-1];break;case 2:this.$=$$[$0-2]+$$[$0];break;case 3:this.$=$$[$0-2]-$$[$0];break;case 4:this.$=$$[$0-2]*$$[$0];break;case 5:this.$=$$[$0-2]/$$[$0];break;case 6:this.$=Math.pow($$[$0-2],$$[$0]);break;case 7:this.$=$$[$0-2]%$$[$0];break;case 8:this.$=-$$[$0];break;case 9:if($$[$0-2]<1)throw"Dice must have at least one side!";if($$[$0]<1)throw"You must keep at least one die!";if($$[$0]>$$[$0-4])throw"You can't keep more dice than you roll!";var rolls=[];for(var i=$$[$0-4];i--;)rolls.push(getRandomInt(1,$$[$0-2]));var roll=rolls.sort(function(a,b){return a-b}).slice(rolls.length-$$[$0],rolls.length).reduce(function(a,b){return a+b});console.log("Rolled "+rolls+" = "+roll);this.$=roll;break;case 10:if($$[$0-2]<1)throw"Dice must have at least one side!";if($$[$0]<1)throw"You must keep at least one die!";if($$[$0]>$$[$0-4])throw"You can't keep more dice than you roll!";var rolls=[];for(var i=$$[$0-4];i--;)rolls.push(getRandomInt(1,$$[$0-2]));var roll=rolls.sort(function(a,b){return a-b}).slice(0,$$[$0]).reduce(function(a,b){return a+b});console.log("Rolled "+rolls+" = "+roll);this.$=roll;break;case 11:if($$[$0]<1)throw"Dice must have at least one side!";var rolls=[];for(var i=$$[$0-2];i--;)rolls.push(getRandomInt(1,$$[$0]));var roll=rolls.reduce(function(a,b){return a+b});console.log("Rolled "+rolls+" = "+roll);this.$=roll;break;case 12:if($$[$0]<1)throw"Dice must have at least one side!";var roll=getRandomInt(1,$$[$0]);console.log("Rolled "+roll);this.$=roll;break;case 13:if($$[$0]<1)throw"You must keep at least one die!";if($$[$0]>$$[$0-4])throw"You can't keep more dice than you roll!";var rolls=[];for(var i=$$[$0-4];i--;)rolls.push(getRandomInt(-1,1));var roll=rolls.sort(function(a,b){return a-b}).slice(rolls.length-$$[$0],rolls.length).reduce(function(a,b){return a+b});console.log("Rolled "+rolls+" = "+roll);this.$=roll;break;case 14:if($$[$0]<1)throw"You must keep at least one die!";if($$[$0]>$$[$0-4])throw"You can't keep more dice than you roll!";var rolls=[];for(var i=$$[$0-4];i--;)rolls.push(getRandomInt(-1,1));var roll=rolls.sort(function(a,b){return a-b}).slice(0,$$[$0]).reduce(function(a,b){return a+b});console.log("Rolled "+rolls+" = "+roll);this.$=roll;break;case 15:var rolls=[];for(var i=$$[$0-2];i--;)rolls.push(getRandomInt(-1,1));var roll=rolls.reduce(function(a,b){return a+b});console.log("Rolled "+rolls+" = "+roll);this.$=roll;break;case 16:var roll=getRandomInt(-1,1);console.log("Rolled "+roll);this.$=roll;break;case 17:this.$=$$[$0-1];break;case 18:this.$=Number(yytext);break;case 19:throw"Invalid Input Structure";break}},table:[o([5,6,8,9,10,11],$V0,{3:1,4:2,7:$V1,12:$V2,16:$V3,18:$V4}),{1:[3]},{5:[1,7],6:$V5,7:$V6,8:$V7,9:$V8,10:$V9,11:$Va,12:$Vb},o($Vc,$V0,{4:15,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:16,7:$V1,12:$V2,15:[1,17],16:$V3,18:$V4}),o([6,8,9,10,11,17],$V0,{4:18,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vd,[2,18]),{1:[2,1]},o($Vc,$V0,{4:19,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:20,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:21,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:22,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:23,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:24,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:25,7:$V1,12:$V2,15:[1,26],16:$V3,18:$V4}),o($Vd,[2,8]),o($Ve,[2,12],{12:$Vb}),o($Vd,[2,16]),{6:$V5,7:$V6,8:$V7,9:$V8,10:$V9,11:$Va,12:$Vb,17:[1,27]},o($Vf,[2,2],{8:$V7,9:$V8,10:$V9,11:$Va,12:$Vb}),o($Vf,[2,3],{8:$V7,9:$V8,10:$V9,11:$Va,12:$Vb}),o($Vg,[2,4],{10:$V9,11:$Va,12:$Vb}),o($Vg,[2,5],{10:$V9,11:$Va,12:$Vb}),o($Vh,[2,6],{11:$Va,12:$Vb}),o($Vh,[2,7],{11:$Va,12:$Vb}),o([5,6,7,8,9,10,11,17],[2,11],{12:$Vb,13:[1,28],14:[1,29]}),o([5,6,7,8,9,10,11,12,17],[2,15],{13:[1,30],14:[1,31]}),o($Vd,[2,17]),o($Vc,$V0,{4:32,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:33,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:34,7:$V1,12:$V2,16:$V3,18:$V4}),o($Vc,$V0,{4:35,7:$V1,12:$V2,16:$V3,18:$V4}),o($Ve,[2,9],{12:$Vb}),o($Ve,[2,10],{12:$Vb}),o($Ve,[2,13],{12:$Vb}),o($Ve,[2,14],{12:$Vb})],defaultActions:{7:[2,1]},parseError:function parseError(str,hash){if(hash.recoverable){this.trace(str)}else{function _parseError(msg,hash){this.message=msg;this.hash=hash}_parseError.prototype=Error;throw new _parseError(str,hash)}},parse:function parse(input){var self=this,stack=[0],tstack=[],vstack=[null],lstack=[],table=this.table,yytext="",yylineno=0,yyleng=0,recovering=0,TERROR=2,EOF=1;var args=lstack.slice.call(arguments,1);var lexer=Object.create(this.lexer);var sharedState={yy:{}};for(var k in this.yy){if(Object.prototype.hasOwnProperty.call(this.yy,k)){sharedState.yy[k]=this.yy[k]}}lexer.setInput(input,sharedState.yy);sharedState.yy.lexer=lexer;sharedState.yy.parser=this;if(typeof lexer.yylloc=="undefined"){lexer.yylloc={}}var yyloc=lexer.yylloc;lstack.push(yyloc);var ranges=lexer.options&&lexer.options.ranges;if(typeof sharedState.yy.parseError==="function"){this.parseError=sharedState.yy.parseError}else{this.parseError=Object.getPrototypeOf(this).parseError}function popStack(n){stack.length=stack.length-2*n;vstack.length=vstack.length-n;lstack.length=lstack.length-n}_token_stack:var lex=function(){var token;token=lexer.lex()||EOF;if(typeof token!=="number"){token=self.symbols_[token]||token}return token};var symbol,preErrorSymbol,state,action,a,r,yyval={},p,len,newState,expected;while(true){state=stack[stack.length-1];if(this.defaultActions[state]){action=this.defaultActions[state]}else{if(symbol===null||typeof symbol=="undefined"){symbol=lex()}action=table[state]&&table[state][symbol]}if(typeof action==="undefined"||!action.length||!action[0]){var errStr="";expected=[];for(p in table[state]){if(this.terminals_[p]&&p>TERROR){expected.push("'"+this.terminals_[p]+"'")}}if(lexer.showPosition){errStr="Parse error on line "+(yylineno+1)+":\n"+lexer.showPosition()+"\nExpecting "+expected.join(", ")+", got '"+(this.terminals_[symbol]||symbol)+"'"}else{errStr="Parse error on line "+(yylineno+1)+": Unexpected "+(symbol==EOF?"end of input":"'"+(this.terminals_[symbol]||symbol)+"'")}this.parseError(errStr,{text:lexer.match,token:this.terminals_[symbol]||symbol,line:lexer.yylineno,loc:yyloc,expected:expected})}if(action[0]instanceof Array&&action.length>1){throw new Error("Parse Error: multiple actions possible at state: "+state+", token: "+symbol)}switch(action[0]){case 1:stack.push(symbol);vstack.push(lexer.yytext);lstack.push(lexer.yylloc);stack.push(action[1]);symbol=null;if(!preErrorSymbol){yyleng=lexer.yyleng;yytext=lexer.yytext;yylineno=lexer.yylineno;yyloc=lexer.yylloc;if(recovering>0){recovering--}}else{symbol=preErrorSymbol;preErrorSymbol=null}break;case 2:len=this.productions_[action[1]][1];yyval.$=vstack[vstack.length-len];yyval._$={first_line:lstack[lstack.length-(len||1)].first_line,last_line:lstack[lstack.length-1].last_line,first_column:lstack[lstack.length-(len||1)].first_column,last_column:lstack[lstack.length-1].last_column};if(ranges){yyval._$.range=[lstack[lstack.length-(len||1)].range[0],lstack[lstack.length-1].range[1]]}r=this.performAction.apply(yyval,[yytext,yyleng,yylineno,sharedState.yy,action[1],vstack,lstack].concat(args));if(typeof r!=="undefined"){return r}if(len){stack=stack.slice(0,-1*len*2);vstack=vstack.slice(0,-1*len);lstack=lstack.slice(0,-1*len)}stack.push(this.productions_[action[1]][0]);vstack.push(yyval.$);lstack.push(yyval._$);newState=table[stack[stack.length-2]][stack[stack.length-1]];stack.push(newState);break;case 3:return true}}return true}};function getRandomInt(min,max){return Math.floor(Math.random()*(max-min+1))+min}var lexer=function(){var lexer={EOF:1,parseError:function parseError(str,hash){if(this.yy.parser){this.yy.parser.parseError(str,hash)}else{throw new Error(str)}},setInput:function(input,yy){this.yy=yy||this.yy||{};this._input=input;this._more=this._backtrack=this.done=false;this.yylineno=this.yyleng=0;this.yytext=this.matched=this.match="";this.conditionStack=["INITIAL"];this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0};if(this.options.ranges){this.yylloc.range=[0,0]}this.offset=0;return this},input:function(){var ch=this._input[0];this.yytext+=ch;this.yyleng++;this.offset++;this.match+=ch;this.matched+=ch;var lines=ch.match(/(?:\r\n?|\n).*/g);if(lines){this.yylineno++;this.yylloc.last_line++}else{this.yylloc.last_column++}if(this.options.ranges){this.yylloc.range[1]++}this._input=this._input.slice(1);return ch},unput:function(ch){var len=ch.length;var lines=ch.split(/(?:\r\n?|\n)/g);this._input=ch+this._input;this.yytext=this.yytext.substr(0,this.yytext.length-len);this.offset-=len;var oldLines=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1);this.matched=this.matched.substr(0,this.matched.length-1);if(lines.length-1){this.yylineno-=lines.length-1}var r=this.yylloc.range;this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:lines?(lines.length===oldLines.length?this.yylloc.first_column:0)+oldLines[oldLines.length-lines.length].length-lines[0].length:this.yylloc.first_column-len};if(this.options.ranges){this.yylloc.range=[r[0],r[0]+this.yyleng-len]}this.yyleng=this.yytext.length;return this},more:function(){this._more=true;return this},reject:function(){if(this.options.backtrack_lexer){this._backtrack=true}else{return this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})}return this},less:function(n){this.unput(this.match.slice(n))},pastInput:function(){var past=this.matched.substr(0,this.matched.length-this.match.length);return(past.length>20?"...":"")+past.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var next=this.match;if(next.length<20){next+=this._input.substr(0,20-next.length)}return(next.substr(0,20)+(next.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var pre=this.pastInput();var c=new Array(pre.length+1).join("-");return pre+this.upcomingInput()+"\n"+c+"^"},test_match:function(match,indexed_rule){var token,lines,backup;if(this.options.backtrack_lexer){backup={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done};if(this.options.ranges){backup.yylloc.range=this.yylloc.range.slice(0)}}lines=match[0].match(/(?:\r\n?|\n).*/g);if(lines){this.yylineno+=lines.length}this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:lines?lines[lines.length-1].length-lines[lines.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+match[0].length};this.yytext+=match[0];this.match+=match[0];this.matches=match;this.yyleng=this.yytext.length;if(this.options.ranges){this.yylloc.range=[this.offset,this.offset+=this.yyleng]}this._more=false;this._backtrack=false;this._input=this._input.slice(match[0].length);this.matched+=match[0];token=this.performAction.call(this,this.yy,this,indexed_rule,this.conditionStack[this.conditionStack.length-1]);if(this.done&&this._input){this.done=false}if(token){return token}else if(this._backtrack){for(var k in backup){this[k]=backup[k]}return false}return false},next:function(){if(this.done){return this.EOF}if(!this._input){this.done=true}var token,match,tempMatch,index;if(!this._more){this.yytext="";this.match=""}var rules=this._currentRules();for(var i=0;i<rules.length;i++){tempMatch=this._input.match(this.rules[rules[i]]);if(tempMatch&&(!match||tempMatch[0].length>match[0].length)){match=tempMatch;index=i;if(this.options.backtrack_lexer){token=this.test_match(tempMatch,rules[i]);if(token!==false){return token}else if(this._backtrack){match=false;continue}else{return false}}else if(!this.options.flex){break}}}if(match){token=this.test_match(match,rules[index]);if(token!==false){return token}return false}if(this._input===""){return this.EOF}else{return this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})}},lex:function lex(){var r=this.next();if(r){return r}else{return this.lex()}},begin:function begin(condition){this.conditionStack.push(condition)},popState:function popState(){var n=this.conditionStack.length-1;if(n>0){return this.conditionStack.pop()}else{return this.conditionStack[0]}},_currentRules:function _currentRules(){if(this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules}else{return this.conditions["INITIAL"].rules}},topState:function topState(n){n=this.conditionStack.length-1-Math.abs(n||0);if(n>=0){return this.conditionStack[n]}else{return"INITIAL"}},pushState:function pushState(condition){this.begin(condition)},stateStackSize:function stateStackSize(){return this.conditionStack.length},options:{},performAction:function anonymous(yy,yy_,$avoiding_name_collisions,YY_START){var YYSTATE=YY_START;switch($avoiding_name_collisions){case 0:break;case 1:return 18;break;case 2:return 8;break;case 3:return 9;break;case 4:return 7;break;case 5:return 6;break;case 6:return 10;break;case 7:return 11;break;case 8:return 16;break;case 9:return 17;break;case 10:return 12;break;case 11:return 13;break;case 12:return 14;break;case 13:return 15;break;case 14:return 5;break;case 15:throw"Invalid Input Token!";break}},rules:[/^(?:\s+)/,/^(?:[0-9]+)/,/^(?:\*)/,/^(?:\/)/,/^(?:-)/,/^(?:\+)/,/^(?:\^)/,/^(?:%)/,/^(?:\()/,/^(?:\))/,/^(?:[dD])/,/^(?:[hHkK])/,/^(?:[lL])/,/^(?:[fF])/,/^(?:$)/,/^(?:.)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],inclusive:true}}};return lexer}();parser.lexer=lexer;function Parser(){this.yy={}}Parser.prototype=parser;parser.Parser=Parser;return new Parser}();if(typeof require!=="undefined"&&typeof exports!=="undefined"){exports.parser=dice;exports.Parser=dice.Parser;exports.parse=function(){return dice.parse.apply(dice,arguments)};exports.main=function commonjsMain(args){if(!args[1]){console.log("Usage: "+args[0]+" FILE");process.exit(1)}var source=require("fs").readFileSync(require("path").normalize(args[1]),"utf8");return exports.parser.parse(source)};if(typeof module!=="undefined"&&require.main===module){exports.main(process.argv.slice(1))}}