Eas (Easy Application Script) by Molaskes

Loops

[ block start: simple: ^\s*@\s*{;;iterations}\s*$ {+loops} range: ^\s*@\s*{;;start}\s*\.\.\s*{;;end}\s*$ while: ^\s*@\?\s*{;;while}\s*..\s*{;;limit}\s*$ until: ^\s*@\s*$ foreach: ^\s*@@\s*{;;var}\s*$ block end: ^\s*/\s*$ until-block end: ^\s*/\s*{;;until}\s*..\s*{;;limit}\s*$ break: >;;/ continue: >;;> index counter: @ foreach value: @ foreach key: @@ ] Simple&;nbsp;Loop{=simple loop}{=for-loop}: @ iterations {+at-sign}{+iterations}{+iterate} actions / {+slash} Range&;nbsp;Loop{=range loop}: @ start .. end {+point} actions / While- and until-loops are the most frequent reason for program crashes, and therefore have a ,,mandatory ,,lifeline in Eas. Their {limit} parameter must be given as an integer number constant greater than 0. The loop will be aborted automatically after the set limit of iterations. While-Loop{=while-loop}{=while-do}: @? run-condition .. limit actions {+question mark} / Until-Loop{=until-loop}{=do-while}: @/ stop-condition .. limit actions / Foreach-Loop{=foreach-loop}{=array loop}: @@ varname {=string loop} actions / To {break}{=stop} (stop and leave) a loop: >;;/ {+greater-than sign} To {continue}{=skip} a loop, i.e. skip to the next iteration: >;;> The current {iteration counter}{=index counter} (for all loop types except foreach) can be read by: @ It tells the current index for range loops, counts from 0 upwards for simple loops and from 1 upwards for while and foreach loops. The @ read-only pseudo-variable {+pseudo-variable} also exists for foreach-loops, where it returns the {array value}, while the {array key} is returned by the second read-only pseudo-variable: @@ They are valid only for the loop they are immediately situated in. To carry their value into a nested loop or outside of the loop, copy it to a regular variable. If you use the @ pseudo-variable in a while- or until-loop condition, it refers to that very loop. Whereas if you use it in the header of an iteration loop (simple, range or foreach), it refers to the parent loop of it. Both @ and @@ can be used as point-syntax{=arrays} array keys: array.@ = array[@] array.@@ = array[@@] And they can be used like {variables in strings}: [ [: @99..0 ?@=0 SAY:"All bottles are gone." >/ / SAY:"Still ;@ bottle" ?@>1 SAY:"s" / SAY:" on the wall."/ / :] ] Also remember that strings are treated as arrays of chars, so the foreach-loop works perfectly with strings as well. [ PHP: [: for($i=0;$i<10;$i++)$a[]=$i; :] Eas: [: @10 a..@ / -;;- or -;;- @0..9 a..@ / :] ] [ JS: [: for(i=5;i<=9;i++)a[i]=0 :] Pascal: [: for i:=5 to 9 do a[i]:=0; :] Eas: [: @5..9 a.@ 0 / :] ] [ JS: [: for(i=9;i>=5;i--)a[i]=0 :] Pascal: [: for i:=9 downto 5 do a[i]:=0; :] Eas: [: @9..5 a.@ 0 / :] ] [ PHP: [: while($x>3){ if($x==15)break; $a[]=$x--; } :] Eas: [: @?x>3..1000 ?x=15 >;;/ / a..x x- / :] ] [ Pascal: [: l:=Length(a); Repeat inc(l); SetLength(a,l); a[l]:=x; inc(x); Until x>8; :] PHP: [: do$a[]=$x++;while($x<9); :] Eas: [: @ a..x x+ /x>8..1000 :] ] [ PHP: [: foreach($a as$v){ if(!($v&1))continue; $b[]=$c; } :] JS: [: for(v in a){ v=a[v] if(!(v&1))continue b[b.length]=v } :] Eas: [: @@a ?@.*1=0 >;;> / b..@ / :] ] [ PHP: [: for($i=0;$i<strlen($mystr);$i++){;; echo"char $i is \"".$mystr{;;$i}."\"\n"; } :] Eas: [: @@mystr SAY:"char ;@@ is "";@"""/ / :] ] [ PHP: [: foreach($a as$k=>$v)$b[]="$k:$v"; :] Eas: [: @@a b..";@@:;@" / :] ]