Skip to content

Instantly share code, notes, and snippets.

@drewlesueur
Created March 12, 2010 07:26
Show Gist options
  • Save drewlesueur/330121 to your computer and use it in GitHub Desktop.
Save drewlesueur/330121 to your computer and use it in GitHub Desktop.
lines
<!doctype html>
<html>
<head>
<script>
if(!this.JSON)this.JSON={}; (function(){function k(a){return a<10?"0"+a:a}function n(a){o.lastIndex=0;return o.test(a)?'"'+a.replace(o,function(c){var d=q[c];return typeof d==="string"?d:"\\u"+("0000"+c.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+a+'"'}function l(a,c){var d,f,i=g,e,b=c[a];if(b&&typeof b==="object"&&typeof b.toJSON==="function")b=b.toJSON(a);if(typeof j==="function")b=j.call(c,a,b);switch(typeof b){case "string":return n(b);case "number":return isFinite(b)?String(b):"null";case "boolean":case "null":return String(b);case "object":if(!b)return"null"; g+=m;e=[];if(Object.prototype.toString.apply(b)==="[object Array]"){f=b.length;for(a=0;a<f;a+=1)e[a]=l(a,b)||"null";c=e.length===0?"[]":g?"[\n"+g+e.join(",\n"+g)+"\n"+i+"]":"["+e.join(",")+"]";g=i;return c}if(j&&typeof j==="object"){f=j.length;for(a=0;a<f;a+=1){d=j[a];if(typeof d==="string")if(c=l(d,b))e.push(n(d)+(g?": ":":")+c)}}else for(d in b)if(Object.hasOwnProperty.call(b,d))if(c=l(d,b))e.push(n(d)+(g?": ":":")+c);c=e.length===0?"{}":g?"{\n"+g+e.join(",\n"+g)+"\n"+i+"}":"{"+e.join(",")+"}"; g=i;return c}}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+k(this.getUTCMonth()+1)+"-"+k(this.getUTCDate())+"T"+k(this.getUTCHours())+":"+k(this.getUTCMinutes())+":"+k(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(){return this.valueOf()}}var p=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, o=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,g,m,q={"\u0008":"\\b","\t":"\\t","\n":"\\n","\u000c":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},j;if(typeof JSON.stringify!=="function")JSON.stringify=function(a,c,d){var f;m=g="";if(typeof d==="number")for(f=0;f<d;f+=1)m+=" ";else if(typeof d==="string")m=d;if((j=c)&&typeof c!=="function"&&(typeof c!=="object"||typeof c.length!=="number"))throw new Error("JSON.stringify");return l("", {"":a})};if(typeof JSON.parse!=="function")JSON.parse=function(a,c){function d(f,i){var e,b,h=f[i];if(h&&typeof h==="object")for(e in h)if(Object.hasOwnProperty.call(h,e)){b=d(h,e);if(b!==undefined)h[e]=b;else delete h[e]}return c.call(f,i,h)}p.lastIndex=0;if(p.test(a))a=a.replace(p,function(f){return"\\u"+("0000"+f.charCodeAt(0).toString(16)).slice(-4)});if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){a=eval("("+a+")");return typeof c==="function"?d({"":a},""):a}throw new SyntaxError("JSON.parse");}})();
var i = 0;
function parse_textarea() {
var text = document.getElementById("t").value
i = 0;
parse(text)
}
function print(x) {
console.log(x[1])
}
function print2(arr) {
console.log(arr)
}
function _if() {
}
var heap = {}
var global_scope = {}
var heap_count = 0;
var current_scope = global_scope
var meta = {}
function set(varname, value, scope) {
heap[heap_count] = value;
scope[varname] = heap_count
return heap_count
heap_count++
}
function set_literal(varname, value, scope) {
scope[varname] = value;
return value;
}
function set_address(varname, address, scope) {
scope[varname] = address
}
function get_address(varname, scope){
var ret = scope[varname]
return ret
}
function lookup(varname, scope) {
if (varname in scope) {
var address = scope[varname];
} else {
return varname
}
return heap[address];
}
function lookup_by_address(address) {
return heap[address];
}
function c(x) { console.log(x)}
function ev(exp) {
exp = exp[0]
if (exp.substr(0,"string".length) == "string") {
return exp.substr(string.length)
}
var set_string = exp.indexOf(' = "')
if (set_string != -1) {
var ret = exp.substr(set_string + ' = "'.length)
var address = set(exp.substr(0,set_string), ret, current_scope)
return ret
}
var words = exp.split(" ")
if (words.length == 1) {
ret = lookup(words[0], current_scope)
return ret
}
//testing this
if (words[1] == "=") {
if (words.length == 3) {
var value = words[2];
if (value.test(/^[\d]+$/)) { //if digit
ret =
}
ret = get_address(value, current_scope)
set_address(words[0], ret, current_scope)
ret = lookup_by_address(ret)
return ret
} else if (words.length > 3) {
//set(words[0], lookup(words.slice(2), current_scope), current_scope)
}
}
}
var types = [
//[/^print (.*)$/, print],
[/^(?:(?:[\S]+[\s]*)+)$/, ev],
//[/^(?:[\S]+[\s]{1})+[\S]+$/, print2],
[/test/, _if]
]
function parse(text) {
var lines = text.split('\n')
while (i < lines.length) {
line = lines[i]
for (var j in types) {
type = types[j]
r = types[j][0]
matches = line.match(r)
if (matches) {
f = types[j][1]
ret = f.call(null, matches)
console.log(ret)
break;
}
}
i++;
}
}
</script>
<style>
textarea {
width: 500px;
height: 500px;
}
</style>
</head>
<body>
<textarea id="t"></textarea>
<input type="button" onclick="parse_textarea()">
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment