10.01) Parser-Levels

JM° hat 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
  • strict
  • verystrict
  • insane

In "Open" ist somit alles erlaubt und verfügbar, was auch unter "Insane" erlaubt ist.

Info:
"Open" ist vor allem für schnelles skripten geeignet. Für umfangreichere Projekte empfiehlt sich "strict" oder "verystrict".

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
	?{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
	((%+1) * 10).print

 

Strict

Für etwas größere Projekte und klareren Code.

>strict

:bubble( List list )
	dirty = true
	While( dirty )
		dirty = false
		For( 1, list.len - 1 ).each(: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
°bubble(l)
l.each
	((%+1) * 10).print

 

VeryScrict

Für noch klareren Code, ohne Abkürzungen.

>verystrict

:bubble( List list ) Nil
	dirty = true
	While( dirty ).then
		dirty = false
		For( 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 werden z.B. auch keine mathematischen Zeichen (+-*/=) mehr erlaubt, sondern nur noch die Funktionsnamen wie .add .sub .mul .div .let.

>insane

:bubble( List list ) Nil
	dirty.let(true)
	While( dirty ).then
		dirty.let(false)
		For( 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.print