Talen en automaten/2011-12/producten/euphoria

Uit Werkplaats
< Talen en automaten‎ | 2011-12‎ | producten
Versie door Erica Kemperman (overleg | bijdragen) op 23 feb 2012 om 19:18
(wijz) ← Oudere versie | Huidige versie (wijz) | Nieuwere versie → (wijz)
Ga naar: navigatie, zoeken

Page Break




Algolfrag.jpg

Talen en automaten

Erik Barendsen


 © comments



Euphoria

Bjorn Rijpert, Erica Kemperman



Talen en automaten 2011-12



maak een afspraak voor de bespreking






Bjorn Rijpert Schakelprogramma Informatica
 e-mail 

cursuspagina


Erica Kemperman Andere
 e-mail 

cursuspagina


Page Break





Beschrijving

Euphoria is in 1993 als een commerciële programmeertaal de wereld in gekomen. In 2006 werd Euphoria een Open source programmeertaal. Euphoria is in het algemeen bedoeld als een high-level imperatief/procedureel geïnterpreteerde taal. Een vertaler vertaalt de code naar een 'C'-code.

Euphoria richt zich op simpelheid, leesbaarheid, snelle ontwikkelbaarheid en prestatie.

• Simpelheid:

          - De taal gebruikt vier ingebouwde data types: atom, sequence, integer, object
          - Er zit een automatische garbage collection in. Hij zorgt dus zelf voor geheugen management.

• Leesbaarheid:

          - De syntax heeft de voorkeur voor simpele Engelse woorden in plaats van interpuncties.

• Snel ontwikkelbaar

          - Hij is bedoeld om prototypering en incrementele ontwikkelmethode aan te moedigen

• Prestatie

          - Bij Euphoria zit een efficiënte garbage collector die correct gebruik maakt van cyclische referenties. 

Zoals al eerder vermeld heeft Euphoria vier ingebouwde data types. Hieronder zijn twee basis data types:

• Atom: Dit is een getal, geïmplementeerd als een 31-bit int of een 64-bit IEEE floating-point. Euphoria wisselt tussen een int of floating point volgens de huidige waarde.

• Sequence: Dit is een Vector (array) met nul of meer elementen. Elk element is een atom of een andere sequence. De lengte van een sequence staat niet vast en mag ook tijdens ‘run-time’ nog worden aangepast. De lengte kan ook 0 zijn, dan heb je de lege rij. Om een rij staat altijd {} en verschillende elementen in de rij worden van elkaar gescheiden door een komma, bijvoorbeeld: {1,2,{}} is het rijtje dat de atoms 1, 2 en het lege rijtje bevat.

Euphoria heeft twee extra data types gedefinieerd:

• Integer: Dit is een atom, die gelimiteerd is tot een 31-bit integer waarde die tussen -1073741824 en 1073741823 (-2^30 to 2^30-1) in zit.

• Object: Dit is een generieke data type die alles dat hierboven genoemd is kan bevatten.

Er kunnen ook letters of woorden in plaats van een atom of een sequence gebruikt worden, in het eerste geval moet er om die letters ‘’ gezet worden, in het tweede geval “ “

Voorbeeld:

  -- Following is equivalent to the atom 66 - the ASCII code for B
  char = 'B'
  -- Following is equivalent to the sequence {66}
  sentence = "B"

Een voorbeeld programma in Euphoria is het programma voor Hello World:

  puts(1, "Hello, World\n")

Hier zorgt puts() ervoor dat de tekst op het scherm verschijnt. Daarvoor zijn 2 argumenten nodig: als eerste de 1, stuurt de output naar STDOUT of de console en het tweede argument is de string tekst die de output zal zijn.

Het resultaat is:

  Hello, World

Een ander voorbeeld uit de taal is:

  integer a = 10
  integer b = 20
  if (a + b) = 40 then
     printf(1, "Value of (a + b ) is  %d\n", a + b )
  elsif (a + b) = 45 then
     printf(1, "Value of (a + b ) is  %d\n", a + b )
  elsif (a + b) = 30 then
     printf(1, "Value of (a + b ) is  %d\n", a + b )
  else
     printf(1, "Value of (a + b ) is  %d\n", 0 )
  end if

Dit geeft het volgende resultaat:

  Value of (a + b ) is  30

Euphoria maakt dus, net als de meeste programmeertalen, ook gebruik van de statements if, else, elsif en endif, waarbij er na elke if een endif moet komen.

meer informatie meer informatie

Regulier?

We gaan met behulp van het pomplemma bewijzen dat Euphoria niet regulier is. Dit lemma werkt als volgt: Als de taal, noem hem even L, geaccepteerd wordt door een DFA met k toestanden en je hebt een z ∈ L met lengte(z) ≥ k, dan kun je z schrijven als: z = uvw met lengte(v) > 0, zodat Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle uv^iw} ∈L ∀i (ook voor i=0) en lengte (uv) ≤ k.

Stel nu dat Euphoria wel regulier is, dan is er een automaat met k toestanden die hem accepteert. Het pomplemma zegt dat elk woord van lengte ≥ k pompbaar is. Kijk nu naar het volgende woord: {{{{{…{}…}}}}}, waarbij het aantal openingshaken { en het aantal sluitingshaken } beide gelijk is aan k. Dus z = {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^k} }Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^k} . Dit is het rijtje dat het rijtje bevat, dat weer het rijtje bevat,enz…, dat het lege rijtje {} bevat. Dit woord zit dus in de taal, omdat alle rijtjes die uit rijtjes bestaan in de taal zitten. Nu kun je volgens het pomplemma z schrijven als uvw met lengte(uv) ≤ k, dus {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^k} }Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^k} is te schrijven als {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^p} {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^q} {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^{k-p-q}} }Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^k} , met q>0, waarbij u = {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^p} , v = {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^q} en w = {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^{k-p-q}} } Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^k} . Nu kun je v oppompen en dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w = {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^p} {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^{2q}} {Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^{k-p-q}} }Parsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^k} . Maar dit zit helemaal niet meer in de taal, want q>0, dus heb je nu meer openingshaken { dan sluitingshaken }, terwijl iedere rij een openingshaak én een sluitingshaak moet hebben. Het kan ook niet zo zijn dat die q haken { die je meer hebt gewone atoms zijn, want atoms zijn óf getallen óf letters met ‘’ eromheen. En als { wel een atom had kunnen zijn en q is groter dan 1, dan mist er weer minimaal 1 komma, omdat je dan meerdere { over hebt en er in een rijtje dan dus meerdere { als atom zouden zitten en die moeten gescheiden worden door komma’s. Je krijgt dus een tegenspraak met het pomplemma. Dus is de taal Euphoria niet regulier.

We hebben ook nog een voorbeeldprogramma opgezocht om daar ditzelfde bewijs op toe te kunnen passen, dit programma noemen we A:

  sequence x
  x = {1, 2, 3, 4}
  for a = 1 to length(x) do
     printf(1, "value of x[%d] = %d\n", {a, x[a]})
  end for

Dit programma geeft als uitkomst:

  value of x[1] = 1
  value of x[2] = 2
  value of x[3] = 3
  value of x[4] = 4

Nu vervangen we de 1 in de rij x door ons rijtje {{{{{…{}…}}}}}, waarbij je weer k openingshaken { hebt. Nu krijg je het programma:

  sequence x
  x = {{{{{{…{}…}}}}}, 2, 3, 4}
  for a = 1 to length(x) do
     printf(1, "value of x[%d] = %d\n", {a, x[a]})
  end for

wat ook in de taal zit, omdat het rijtje x nog steeds een toegestaan rijtje is, en je krijgt nu als resultaat:

  value of x[1] = {{{{{{…{}…}}}}}
  value of x[2] = 2
  value of x[3] = 3
  value of x[4] = 4

Nu kun je volgens het pomplemma, als je aanneemt dat Euphoria regulier is, A schrijven als uvw met lengte(uv) ≤ k, waarbij v pompbaar is. uv ≤ k, dus uv loopt vanaf sequence maximaal tot aan een openingshaakje {, omdat je k+1 openingshaakjes hebt. Nu kun je verschillende gevallen onderscheiden:

Geval 1: u = leeg, v = sequence, dan is w de rest van het programma. Nu kunnen we v gaan pompen en dan zit uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w ook in de taal. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w = sequence sequence x ... (hetzelfde programma, maar dan begint het met twee keer sequence in plaats van één keer). Maar dit programma zit niet meer in de taal.

Geval 2: u = sequence, v = x, dan is w de rest van het programma. Nu kunnen we v gaan pompen en dan zit uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w ook in de taal. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w = sequence xx ... (hetzelfde programma, maar dan begint het met sequence xx in plaats van sequence x). Dit woord zit niet in de taal, omdat je eerst een rij xx initialiseert en vervolgens een rij x definieert. Dit werkt dus niet.

Geval 3: u = sequence x, v = x, dan is w de rest van het programma. Nu kunnen we v gaan pompen en dan zit uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w ook in de taal. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^2} w =

  sequence x 
  xx = ... 

(hetzelfde programma, maar dan staat er xx = in plaats van x =) Dit woord zit niet in de taal, omdat je eerst een rij x initialiseert en vervolgens een rij xx definieert. Dit werkt dus niet.

Geval 4: u = alles tot aan de =, v = '=' (de aanhalingstekens horen er niet bij), w = de rest. Nu kunnen we v gaan pompen en dan zit uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  sequence x
  x {{{{... 

(hetzelfde programma, maar de = ontbreekt) Dit programma zit niet in de taal, omdat x niet gedefinieerd wordt, door het ontbreken van de =.

Geval 5: u = alles tot aan het eerste haakje {, v = een bepaald aantal openingshaakjes, w = de rest van het programma. Als je v pompt krijg je een programma dat niet in de taal zit, het bewijs gaat op dezelfde manier als het bewijs dat we hierboven al gegeven hebben.

Geval 6: u = leeg, v = sequence x, w= de rest. Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  x = ... 

(hetzelfde programma, maar dan zonder het begin sequence x). Nu wordt x dus niet geïnitialiseerd en klopt het programma dus niet meer.

Geval 7: u = sequence, v =

  x
  x

(de ene x komt van sequence x en de andere van x =) w = de rest (alles vanaf =) Als je v nu gaat pompen, zou volgens het pomplemma uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal moeten zitten uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  sequence 
  = {... 

(hetzelfde programma, maar dan ontbreekt de x op beide plaatsen) Dit programma zit niet meer in de taal.

Geval 8: u = het begin van het programma (tot aan de tweede x), v = 'x =', w = de rest. Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  sequence x
  {{{...

(hetzelfde programma maar dan zonder 'x=') Nu wordt x dus niet gedefinieerd, maar staat er gewoon een rijtje, terwijl x wel weer in de for-loop gebruikt wordt. Dit woord zit dus niet in de taal.

Geval 9: u = het begin van het programma, v = '= 'een aantal haakjes {, w = de rest. Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  sequence x
  x {{{... 

(hetzelfde programma, maar dan zonder = en het mist een aantal openingshaakjes). Dit woord zit niet meer in de taal, de = mist en het aantal openingshaakjes is niet meer gelijk aan het aantal sluitingshaakjes.

Geval 10: u = leeg, v = sequence t/m de tweede x, w = de rest. Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w = '={{{... ' (hetzelfde programma maar dan zonder het begin tot aan =). Dit programma zit niet meer in de taal, omdat je x nergens initialiseer en definieert en vervolgens wel over de lengte van x begint.

Geval 11: u = sequence, v =

  x
  x =

w = de rest. Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  sequence
  {{...

(hetzelfde programma, maar de eerste x t/m = mist). Dit programma zit niet in de taal, want je zegt weer niks over x, terwijl je het later in het programma wel over de lengte van x hebt, dus je verwijst naar iets wat je nooit genoemd hebt.

Geval 12: u = sequence x, v = x = een aantal openingshaakjes, w = de rest. Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  sequence x {{... 

(hetzelfde programma, maar x = mist en er mist ook een aantal haakjes {). Dit programma zit niet in de taal, omdat je wel weer naar x verwijst, maar x nergens definieert en het aantal { is niet gelijk aan het aantal } )

Geval 13: u = leeg, v =

  sequence x
  x =

w = de rest Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  {{{... 

(hetzelfde programma, maar het begin, tot aan het eerste haakje { mist). Dit programma zit niet in de taal, omdat je verderop in het programma alweer naar x verwijst, zonder dat je het ooit over x gehad hebt.

Geval 14: u = sequence v =

  x
  x = {...

(waarbij {... 1 of meer openingshaakjes is (hooguit k-4)) w = de rest Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

  sequence
  {{...

(hetzelfde programma, maar dan mist de eerste x t/m = en een aantal {) Dit programma zit niet meer in de taal, omdat in ieder geval het aantal { al niet gelijk is aan het aantal }. Bovendien verwijs je weer naar een x die nooit gedefinieerd is.

Geval 15: u = leeg, v =

  sequence x
  x = {...

w = de rest Als je v nu oppompt, dan moet uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w ook in de taal zitten. uvParsen mislukt (MathML met SVG- of PNG-terugval (aanbevolen voor moderne browsers en toegankelijkheidshulpmiddelen): Ongeldig antwoord ("Math extension cannot connect to Restbase.") van server "https://en.wikipedia.org/api/rest_v1/":): {\displaystyle ^0} w =

 {{...

(Hetzelfde programma maar het begin sequence t/m = mist en ook een aantal openingshaakjes mist) Dit programma zit niet meer in de taal, omdat in ieder geval het aantal { al niet gelijk is aan het aantal }. Bovendien verwijs je weer naar een x die nooit gedefinieerd is.

Zo krijg je in alle gevallen een tegenspraak met het pomplemma. Dit bewijst dat de taal, waarvan we hadden aangenomen dat die regulier was, niet regulier is.

Contextvrij?

Om aan te tonen dat de taal Euphoria contextvrij is, hebben wij een grammatica opgesteld voor een deel van de taal.

Gram.jpg

Om te laten zien wat er met deze grammatica geconstrueerd kan worden geven wij drie voorbeelden van de mogelijkheden.

Het lege woord:

  Gram vb1.jpg

Rijtje in begin van een rijtje:

  Gram vb2.jpg

Rijtje met verschillende waarden:

  Gram vb3.jpg

Omdat we een grammatica konden construeren is de taal contextvrij.