📄 lang.js
字号:
return this._working.length == 0; } publ.nextNonWS = function(nlIsWS){ var tkn = this.next(); while((tkn.type == mod.tokens.WSP) || (nlIsWS && (tkn.type == mod.tokens.NL))){ tkn = this.next(); } return tkn; } /** Returns the next token. @return The next token. */ publ.next = function(){ if(this._working ==""){ throw new mod.Exception("Empty"); } var s1 = this._working.charAt(0); var s2 = s1 + this._working.charAt(1); var s3 = s2 + this._working.charAt(2); var rslt=[]; switch(s1){ case '"': case "'": try{ s1 = extractQString(this._working); rslt= new mod.Token(mod.tokens.STR, s1, this._pos); }catch(e){ rslt= new mod.Token(mod.tokens.ERR, s1, this._pos, e); } break; case "\n": case "\r": rslt =new mod.Token(mod.tokens.NL, s1, this._pos); break; case "-": //check for negative numbers s1=this._working.match(/-\d+\.\d+|-\d+/)[0]; if(/^-\d|-\d\.\d/.test(s1)){//number rslt = new mod.Token(mod.tokens.NUM, s1, this._pos); break; } case "{": case "}": case "[": case "]": case "(": case ")": case ":": case ",": case ".": case ";": case "*": case "-": case "+": case "=": case "<": case ">": case "!": case "|": case "&": switch(s2){ case "==": case "!=": case "<>": case "<=": case ">=":case "||": case "&&": rslt = new mod.Token(mod.tokens.OP, s2, this._pos); break; default: rslt = new mod.Token(mod.tokens.OP, s1, this._pos); } break; case "/": if(s2 == "//" || s3 =="///"){ s1 = extractSLComment(this._working); rslt = new mod.Token(s1.charAt(2) != "/" ? mod.tokens.COMMENT:mod.tokens.DOCCOMMENT, s1, this._pos); }else if(s2 == "/*" || s3 =="/**"){ try{ s1 = extractMLComment(this._working); rslt = new mod.Token(s3 !="/**" ? mod.tokens.COMMENT: mod.tokens.DOCCOMMENT, s1, this._pos); }catch(e){ rslt= new mod.Token(mod.tokens.ERR, s3 != "/**" ? s2 : s3, this._pos, e); } }else{ try{ s1 = extractRegExp(this._working); rslt = new mod.Token(mod.tokens.REGEXP, s1, this._pos); }catch(e){ rslt = new mod.Token(mod.tokens.OP, s1, this._pos, e); } } break; case " ": var i = 0; var s=""; while(this._working.charAt(i) == " "){ s+=" "; i++; } rslt = new mod.Token(mod.tokens.WSP, s, this._pos); break; default: s1=this._working.match(/\d+\.\d+|\d+|\w+/)[0]; if(/^\d|\d\.\d/.test(s1)){//number rslt = new mod.Token(mod.tokens.NUM, s1, this._pos); }else{//name rslt =new mod.Token(mod.tokens.NAME, s1, this._pos); } } this._working=this._working.slice(rslt.value.length); this._pos += rslt.value.length; return rslt; } var searchQoute = function(s, q){ if(q=="'"){ return s.search(/[\\']/); }else{ return s.search(/[\\"]/); } } var extractQString=function(s){ if(s.charAt(0) == "'"){ var q="'"; }else{ var q='"'; } s=s.slice(1); var rs=""; var p= searchQoute(s, q); while(p >= 0){ if(p >=0){ if(s.charAt(p) == q){ rs += s.slice(0, p+1); s = s.slice(p+1); return q + rs; }else{ rs+=s.slice(0, p+2); s = s.slice(p+2); } } p = searchQoute(s, q); } throw new mod.Exception("End of String expected."); } var extractSLComment=function(s){ var p = s.search(/\n/); if(p>=0){ return s.slice(0,p+1); }else{ return s; } } var extractMLComment=function(s){ var p = s.search(/\*\//); if(p>=0){ return s.slice(0,p+2); }else{ throw new mod.Exception("End of comment expected."); } } var extractRegExp=function(s){ var p=0; for(var i=0;i<s.length;i++){ if(s.charAt(i) == "/"){ p=i; } if(s.charAt(i) == "\n"){ i = s.length; } } return s.slice(0,p+1); } }) /** Converts an object to JSON. */ Object.prototype.toJSON = function(){ var v=[]; for(attr in this){ if(typeof this[attr] != "function"){ v.push('"' + attr + '": ' + mod.objToJson(this[attr])); } } return "{" + v.join(", ") + "}"; } /** Converts a String to JSON. */ String.prototype.toJSON = function(){ var s = '"' + this.replace(/(["\\])/g, '\\$1') + '"'; s = s.replace(/(\n)/g,"\\n"); return s; } /** Converts a Number to JSON. */ Number.prototype.toJSON = function(){ return this.toString(); } /** Converts a Boolean to JSON. */ Boolean.prototype.toJSON = function(){ return this.toString(); } /** Converts a Date to JSON. Date representation is not defined in JSON. */ Date.prototype.toJSON= function(){ var padd=function(s, p){ s=p+s return s.substring(s.length - p.length) } var y = padd(this.getUTCFullYear(), "0000"); var m = padd(this.getUTCMonth() + 1, "00"); var d = padd(this.getUTCDate(), "00"); var h = padd(this.getUTCHours(), "00"); var min = padd(this.getUTCMinutes(), "00"); var s = padd(this.getUTCSeconds(), "00"); var isodate = y + m + d + "T" + h + ":" + min + ":" + s return '{"jsonclass":["sys.ISODate", ["' + isodate + '"]]}'; } /** Converts an Array to JSON. */ Array.prototype.toJSON = function(){ var v = []; for(var i=0;i<this.length;i++){ v.push(mod.objToJson(this[i])) ; } return "[" + v.join(", ") + "]"; } mod.test=function(){ try{ print(mod.jsonToObj("['sds', -12377,-1212.1212, 12, '-2312']").toJSON()); }catch(e){ print(e.toTraceString()); } } })
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -