eval(readFile('Compiled_LJS_Parser')) eval(readFile('Compiled_NamespaceJS_Compiler')) $loop = new Object(); $start = new Object(); $ts = new Object(); ometa LJS2NJS <: JSTranslator { loop curlyTrans:body -> { 'while [$loop] (true)' + body }, stop -> { 'break [$loop];'}, start trans:body -> { 'while [$start] (true) {' + body + 'break [$start];}'}, repeat -> { 'continue [$start];'}, taskswitcher trans:firstTask trans:body -> { '$ts.currentTask = ' + firstTask + ';' + 'while [$ts] (true) {' + body + 'break [$ts]; }' }, runtask trans:e -> { '$ts.currentTask = ' + e + '; continue [$ts];' }, task trans:e curlyTrans:body -> { 'if ($ts.currentTask == ' + e + ')' + body }, exittask -> { 'break [$ts];' } } programStr = ' var i = 1; start { loop { while (true) { if (i > 0) { alert(i); i--; repeat; } else stop; } } } alert("ok"); ' programStr2 = ' loop { taskswitcher : 1 { task 1 {alert(1);runtask 2;} task 2 {alert(2);stop;} } alert("exited from the task switcher"); } ' a = LJS2NJSParser.matchAll(programStr2 , "topLevel") b = LJS2NJS.match(a, "trans")