JSFiddle - React, Tailwind, and code Playground
HTML
<textarea id="code"></textarea>
<div id="result">
</div>
CSS
#code{
width:100%;
}
#error{
color:red;
}
JavaScript
Array.prototype.last = function() {
var l = this.length - 1;
if (l >= 0) {
return this[l];
}
return null;
};
var compile = function() {
var run = function(str) {
var mainArray = [];
var last;
try {
var reg = /var|""|''|"|'|;|\s+|[a-zA-Z$_0-9]+|[^a-zA-Z$_0-9]+/g;
var reg1=/.*?[^\\\n](?=")|\n/g;
var reg2=/.*?[^\\\n](?=')|\n/g;
var currentReg=0; // тек. номер регулярного выражения
var r = reg;
var arr;
var instring=0;
var output = "";
while ((arr = r.exec(str)) !== null || toOutput()) {
last = mainArray.last();
defWord(arr[0]);
}
return output;
} catch (e) {
return[e.toString()];
}
function defWord(w) {
if(instring){
if(w[0]=="\n") throw "неожиданный перевод строки"
last.str+=w;
reg.lastIndex=(currentReg==1)?reg1.lastIndex:reg2.lastIndex;
r=reg;
instring=0;
return;
}else if (w[0] == " " || w[0] == "\n") { // пока игнорируем
return;
}
switch(w) {
case "var":
var_handler();
break;
case ";":
semicolon_handler();
break;
case '"':
string_handler(0);
break;
case "'":
string_handler(1);
break;
case "''":
string_handler(2);
break;
case '""':
string_handler(3);
break;
default:
w_handler(w);
}
}
function toOutput() {
var l = mainArray.length;
for (var i...