📄 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 + -