Talen en automaten/2011-12/producten/HyperText

Uit Werkplaats
Ga naar: navigatie, zoeken

Page Break




Algolfrag.jpg

Talen en automaten

Erik Barendsen


 © comments



HyperText Markup Language

Jeroen de Jong



Talen en automaten 2011-12



14:10 B






Jeroen de Jong Andere
 e-mail 

cursuspagina


Page Break





Beschrijving

Hyper Text Markup Language oftwel HTML is een markup taal, zoals de naam al doet vermoeden.[1][2] Een markup taal is een modern systeem om een stuk tekst zo te weergeven dat er een duidelijke syntax in voorkomt. HTML wordt wereldwijd gebruikt om pagina’s vorm te geven op het internet. Ook deze wikipedia pagina's accepteren HTML code om de opmaak te definiëren. In het geval van HTML heeft de taal ook de eigenschap dat er instructies voor weergave van de tekst zitten opgeslagen in de taal. Dit heet officiëel ‘Presentation semantics’.

Voorbeeld presentation semantics:

<source lang='html'>

Hello world


</source>

De in de tekst opgeslagen instructies geven aan dat de tekst “Hello world” dikgedrukt weergeven moet worden. De eigenschap dikgedrukt is een specificatie van de ‘presentation semantics’ voor deze bepaalde syntax.

De gewonere vorm van ‘Semantics’ bevat alleen informatie over de structuur van een tekst.

Voorbeeld semantics:

<source lang='html'>

Hello world

</source>

Dit geeft de tekst een structuur, namelijk met een paragraaf “Hello World”.

Een veel voorkomende eigenschap van markup talen is dat ze gemixt worden met de inhoud van het document dat je wilt weergeven. In de taal HTML wordt de taal zelf echter geisoleerd. Dit gebeurd door de woorden in de taal te omvatten in vishaken: <Zoals dit> (Ook al te zien in het voorbeeld). Deze elementen worden ook wel 'tags' genoemd en zijn de elementen van de taal HTML zelf.

Een grammatica van de tekst kan hier worden gevonden: (wel outdated, maar geeft een goed idee)
http://docstore.mik.ua/orelly/web2/xhtml/appa_02.htm

Een standaard voorbeeld van HTML:

<source lang='html'>

<!DOCTYPE html>

<html>

 <head>
   <title>Hello HTML</title>
 </head>
 <body>

Hello World!

 </body>

</html>

</source>

Duidelijk zichtbaar is de voorwaarde voor de syntax: <source lang='html'>

<A> <C> :D </C> </A>

</source>

En niet <source lang='html'>

<A> <C> :D </A> </C>

</source>

Deze eigenschap zal later nog terugkomen in dit werkstuk.

Voor extra (veelste veel) informatie kun je hier terecht:
http://www.w3.org/TR/html401/

Regulier?

Deze tekst is niet regulier. Dit gaan we proberen aan te tonen door middel van het pomplemma.

Ik maak hier gebruik van HTML voor de opmaak. De taal zelf is alleen zichtbaar in de code, maar het resultaat is in de pagina goed te zien.

Te bewijzen: HTML is niet regulier

Bewijs:

Stel HTML is wel regulier. Dan is er een automaat voor de taal HTML met k states. Het pomplemma duidt aan dat een woord in HTML met lengte groter dan k een pompbaar deel heeft in de eerste k tekens.

Een eigenschap van de taal HTML is dat een woord moet voldoen aan de syntax, dat betekend:

1. Alle tags moeten ook weer worden afgesloten (Een paar uitzonderingen nagelaten, bijvoorbeeld
<br>
heeft geen sluitingstag nodig)

2. De eerste tag die wordt gesloten is de sluitingstag voor de laatste die werd geopend.

Stel we nemen het volgende woord: <source lang='html'> <html>

<body>
 
  <b>
   ...
   <b>
    Dit woord voldoet aan de syntax
   
   ...
  </b>
 </b>
</body>

</html> </source> En neem de hoeveelheid openingstags = k, dan veronderstelt het pomplemma dat je het woord kunt pompen met een gedeelte uit de eerste k tekens, maar aangezien dit alleen openingstags zijn, zullen er na het pompen altijd meer openingstags dan sluitingstags zijn en wordt er niet meer aan de syntax voldaan. Het woord behoort dan dus niet meer tot de taal. Er kan dus niet aan het pomplemma worden voldaan, dus de taal HTML is niet regulier.

Contextvrij?

De taal HTML is contextvrij. Dit komt doordat de taal wordt beschreven door een grammatica die contextvrij is.

Nou is het vrij lastig om de hele grammatica van HTML te laten zien op de manier waarop duidelijk wordt dat hij contextvrij is, maar het is wel mogelijk een link te leggen tussen een simpelere contextvrije grammatica en de lastigere contextvrije grammatica van HTML. Het is een soort constructie methode.[3] Bekijk de grammatica voor de tekst met de haakjes '(' en ')' waarvan we willen dat het aan de syntax voldoet. Deze kun je beschrijven met deze grammatica:

 S -> LR|lambda
 S -> LSR
 S -> SS
 L -> (
 R -> )


De taal HTML werkt op precies dezelfde manier alleen dan met meer elementen die geopend kunnen worden en gesloten moeten worden als de taal geaccepteerd wil worden.


 S -> ABZ|lambda
 A -> <html>
 B -> CDY|lambda
 C -> <body>
 D -> ...
 .
 .
 .
 Y -> </body>
 Z -> </html>

Zo wordt voor elke terminal die wordt gekozen ook de sluitingsterminal in de taal gezet. En als je deze grammatica uitbreidt zodat alle elementen van HTML er in voorkomen is HTML dus beschreven door een contextvrije grammatica, dus HTML is contextvrij