Portable Euphoria

Inhoud


Inleiding

Eindelijk weer eens een taaltje gevonden dat simpel is te leren en niet zo groot is .
Een goede opvolger van QBasic . Tevens een taaltje wat werkt in zowel MSWindows als Linux .

Het heeft een syntax gelijkend op Pascal en een data stuctuur welke veel weg heeft van Lisp .


De Taal

Data .


De data is geheel dynamisch , d.w.z. alle problemen worden intern opgelost .
Je hebt in pricipe maar een type n.l. een object .
Je moet een variabele wel declareren v.b. object ik,jij,hij,zij .
De reden hiertoe is het aantal typ fouten iets te reduceren .
De andere declaratie typen zijn : atom , integer , byte_sequence , sequence .
Wat je nu in de variable ik stopt doet er niet toe , het programma converteerd zelf wel naar een geschikte interne representatie .

v.b. jij = 2-- integer
hij = 3.14-- atom (=floating)
ik = "mijn text"-- (byte_)sequence (=string)
zij = {"mijntext","jouw text","haar text"}-- sequence

Een sequence is niet voor iedereen een begrip daar het hier gebruikt wordt voor een verzameling van data objecten welke indexzeerbaar zijn . Vergelijk het met een open array[] of lijst .
De variabele ik is een lijst van { m , i , j , n , , t , e , x , t } .
Elk element is indexzeerbaar zoals ik[3] geeft j .
Zo geeft zij[2] als waarde "jouw text" en zij[2][3] de letter u .


Een sequence kan (tot het geheugen vol is) onbeperkt lang als diep zijn .
vb. zij = { {} , {{{{}}}} , { {},{} } } .
Wat je in een element van een sequence maakt niet uit .
vb. zij = { { 12 ,31 , 41 } , { 12 , "text" , { 3.2 , 1 } } }
zij[2] geeft { 12 , "text" , { 3.2 , 1 } }
zij[1][2] geeft 31
zij[2][3][1] geeft 3.2

Deel van een sequence wordt gegeven door het beginwaarde .. eindwaarde te geven .
vb: zij[2][2][2..3] geeft ex .

Er zijn een bijzondere aantal functies voor dit object :
nieuw = append(var,wat)nieuw = { var , wat }
nieuw = prepend(var,wat)nieuw = { wat , var }
nieuw = concat(var,var)nieuw = { var var }
nieuw = insert(var,wat,waar)nieuw = { var[1..waar-1] , wat , var[waar..$] }
nieuw = remove(object,index)object = { object[1..index-1] , object[index+1..$] }
 
aantal = length(var)$ is gelijk aan length(var) .

Toewijzing (assignment)

Bv. ik = 1 zal wel duidelijk zijn evenals ik = "werkt ook" of ik = {"ik","weet","veel"} .
Het eerste is een integer de andere twee zijn sequence's .

Bv.ik[2] = 10.10 geeft voor ik {"ik",10.10,"veel"}
ik[3][2..3] = "xx" geeft voor ik {"ik",10.10,"vxxl"}
ik = append(ik,200) geeft voor ik {"ik",10.10,"vxxl",{200}}
ik = concat(ik,200) geeft voor ik {"ik",10.10,"vxxl", 200 }

Bv.sequence telefoon = "050-3013383"
object correct = not find(0,telefoon >= '0' and telefoon <= '9' or telefoon = '-')
(n.l telefoon>='0' is {11101111111} n.l. een operator werkt op alle elementen (APL) )
geeft correct = not find(0,{1,1,1,1,1,1,1,1,1,1,1})
geeft correct = not 0
geeft correct = 1

Programma statements

PEU heeft zoals de meeste talen de bekende statements zoals :

if conditie then [else] end if
for i=n to k do ..... end for
while conditie do ... end do
exit spring uit een for/while loop

procedure naam (parameters) ...... end procedure
function naam (parameters) ...... end function
return springt met of zonder resultaat uit de procedure/function

include filenaam , laad externe programma delen .

ifdef conditie thendef statements [elsedef .. ] enddef , conditioneel vertalen .

Peu en IO operaties

Een bekent aantal bestand operaties zijn iets als :
object handle = open( naam , operatie )open bestand
close(handle)sluit bestand
removef( naam )verwijder bestand "naam"
renamef( oldname , newname )wijzig bestandsnaam "oldname" in "newname"
 
getc(handle)lees 1 character uit bestand
gets(handle)lees 1 regeluit bestand
putc(handle)schrijf 1 character naar bestand
puts(handle)schrijf 1 regel naar bestand
 
printf(handle,format,variabelen)schrijf geformateerd naar bestand
readf(handle,format,variabelen)lees geformateerd van bestand
 
string=sprintf(format,variabelen)schrijf geformateerd in het geheugen
sequence=sreadf(variabelen,format)lees geformateerd naar het geheugen
 
print(handle,sequence)schrijf internformaat naar bestand
sequence=get(handle)lees internformaat van bestand
Speciaal zijn de open functie's voor netwerk kommunicatie (TCP/IP).
object handle = open( netwerkadres , mode)
netwerkadres mag een URL of IP nummer zijn .
mode is een c voor client mode , s voor server mode , a voor accept blocking , aw voor accept non-blocking.

Peu en ingebouwde functies

Dat zijn er nog al wat . Ze zijn ingedeeld in 5 delen .

  • Ingebouwde functies zoals rekenkundige .
  • Data bewerkende functies vooral m.b.t. sequence's .
  • Input/Ouput routines .
  • Systeem routines zoals datum tijd en folders .
  • En als laatste een bonte verzameling niet veelvoorkomende opdrachten . Waarvan de belangrijkste die betreffende DLL aankoppeling zijn .

    Peu en externe functies

    Deze zijn standard gegeven in de folder include .
    Dit zijn dingen als sort() en custom_sort() , file_find() .
    Daar zitten dingen in als database , datum routines .
    Voor alle mogelijkheden lees de externe functies .

    Ontstaan .

    Rond 1996 onstaat het taaltje genaamd Euphoria gemaakt door ene Robert Craig .
    Rond 2000 onstaat er een opensource versie als afstudeeropdracht gemaakt door Pete Eberlein .
    Deze versie heet dan PEU en is door Jimmy Brown en Menno gepoogd bug vrij te krijgen .
    Rond 2002 haakt Brown af en is Menno alleen verder gegaan.
    In 2004 geeft Robert Craig de versie vrij als opensource aan de werkgroep Open Euphoria .
    Deze werkgroep maakt dan versie 3 en 4 . Welke naar mijn mening zoveel toeters en bellen
     bevat dat het zeker niet eenvoudiger op is geworden .
    
    PEU is een opensource versie gebasserd op Euphoria 2.x met een aantal extensies .

    Groeten Menno aug 2010