Parser-Levels
JayMo bietet verschiedene Parser-Levels, in denen programmiert werden kann. Je strenger das Level, desto mehr Möglichkeiten und Abkürzungen sind deaktiviert. Dafür wird allerdings auch der Quellcode klarer und sauberer.
Die Level sind:
- open
- low
- medium / strict
- high
- insane
Somit ist all das, was unter "insane" verfügbar ist, auch in "open" verfügbar. Jedoch natürlich noch sehr viel mehr.
"strict" ist ein Alias für "medium".
Info:
"Open" ist der Standard und vor allem für schnelles skripten geeignet. Für umfangreichere Projekte wird "strict" empfohlen.
Definition
Die Parser-Level müssen wie alle Parser-Befehle am Anfang der Datei stehen. Ebenso beginnen sie mit einem '>', gefolgt vom jeweiligen Level.
>strict
Beispiele
Hier die Levels mit Bubblesort und ein paar Zeilen zum Auswerten veranschaulicht.
Open
Standard-Modus, geeignet für schnelles und sehr schlankes skripten.
::bubble( list )
dirty = true
While( dirty )
dirty = false
{ 1, list.len - 1 } => pos
( list[ pos ] > list[ pos + 1 ] )
list.swap( pos, pos + 1 )
dirty = true
l = [3,9,7,1,4,6,1,9,8,5,5,2]
l.print
°bubble( l )
l.each
( ( it+1 ) * 10 ).print
Strict
Für etwas größere Projekte und klareren Code.
>strict
::bubble( List list )
dirty = true
While( dirty )
dirty = false
Count( 1, list.len - 1 ) \\ :pos
If( list[ pos ] > list[ pos + 1 ] )
list.swap( pos, pos + 1 )
dirty = true
l = [3,9,7,1,4,6,1,9,8,5,5,2]
l.print
this.bubble( l )
l.each
( ( it + 1 ) * 10 ).print
VeryScript
Für noch klareren Code, ohne Abkürzungen.
>high
::bubble( List list ) Nil
dirty = true
While( dirty ).then
dirty = false
Count( 1, list.len - 1 ).each( :pos )
If( list.get( pos ) > list.get( pos + 1 ) ).then
list.swap( pos, pos + 1 )
dirty = true
l = List( 3,9,7,1,4,6,1,9,8,5,5,2 )
l.print
this.bubble( l )
l.each
( ( it+1 ) * 10 ).print
Insane
In diesem Level werden alle Vereinfachungen deaktiviert. So sind z.B. auch keine mathematischen Zeichen (+-*/=) mehr erlaubt, weshalb die Funktionsnamen wie .add .sub .mul .div .let verwendet werden müssen.
>insane
::bubble( List list ) Nil
dirty.let(true)
While( dirty ).then
dirty.let( false )
Count( 1, list.len.sub( 1 ) ).each(:pos)
If( list.get( pos ).isGreater( list.get( pos.add( 1 ) ) ) ).then
list.swap( pos, pos.add( 1 ) )
dirty.let( true )
l.let( List( 3,9,7,1,4,6,1,9,8,5,5,2 ) )
l.print
this.bubble( l )
l.each
Group( Group( it.add( 1 ) ).get.mul( 10 ) ).get.prin