Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Haskell
Wiki community
Recent changes
Random page
HaskellWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
Laboratorul de Limbaje
(section)
Page
Discussion
English
Read
Edit
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
==. Haskell - instrument de realizare a interpretoarelor limbajelor == *Datorita modului atat de simplu in care se pot defini in Haskell elementele unui translator limbajul Haskell se recomanda de la sine ca un DSL (domain specific language) pentru realizarea interpretoarelor si compilatoarelor. Astfel, in Haskell se definesc foarte usor: ** Textul de intrare vazut ca string si simultan ca lista de caractere (in Haskell tipul String avand ambele semnificatii) ** Atomii lexicali sunt recunoscuti de parsere specializate, deja existente in biblioteci cum sunt ParseLib si Parsec (sau altele ...) ** Gramaticile, inclusiv cele ambigue sunt imediat transcrise (in asa-zisa do-notatie) sub forma unor secvente de parsere corespunzatori neterminalelor gramaticii. Alternativa "|" beneficiaza de un operator special (+++ in ParseLib) Suportul teoretic, structura algebrica ce permite combinarea efectelor parserelor este Monada Parserelor. ** Arborii sintactici, inclusiv cei polimorfici, se transcriu imediat in Haskell folosind declaratia "data" (destinata tipurilor utilizator). Descrierea structurilor de date pentru reprezentarea arborilor sintactici se poate face pe unul - doua -trei randuri. Deoarece in Haskell la o declaratie "data" se poate adauga "deriving Show", noul tip de date va fi implicit inzestrat cu functie de afisare, pe care programatorul nu mai este obligat s-o scrie el. Simpla modificare a declaratiei "data" a arborilor modifica automat (transparent) functia de afisare. Ideal pentru realizarea prototipurilor. ** Semantica se poate transcrie in do-notatie, dar folosind de obicei o alta monada decat monada parserelor. Nu sunt necesari operatori specializati pentru lifting-ul functiilor uzuale in universul monadei, asa cum se proceda pe vremea cand Espinosa scria la teza sa de doctorat, celebra teza despre "Semantic Lego". Descarcati de aici [http://www.haskell.org/sitewiki/images/9/9b/Transcrierea_semanticii_in_do_notatie.pdf Transcrierea_semanticii_in_do_notatie.pdf un capitol ] dintr-o carte de Dan Popa, destinat a introduce cititorul in tehnicile de exprimare a semanticilor in do-notatie[http://www.haskell.org/sitewiki/images/9/9b/Transcrierea_semanticii_in_do_notatie.pdf (163KB, MIME type: application/pdf).] Dovedeste totodata superioritatea Haskell-ului asupra altor limbaje functionale mai vechi (LISP,SCHEME), in priviinta posibilitatilor de a transcrie semantici in el si explica necesitatea indeplinirii Legilor Monadei. ** Prelucrarile recursive de arbori atat de necesare la parcurgerea arborilor, la listarea unui arbore sintactic (pretty printing) se scriu imediat deoarece Haskell permite definirea de functii recursive, ca succesiuni de ecuatii. * La urma dar nu in cele din urma: Compilatorul de Haskell [http://haskell.org/ghc GHC] este el insusi scris in Haskell. Ceea ce spune tot ce este de spus despre Haskell ca limbaj (DSL) de scriere a compilatoarelor. * Cum sa scrii un mic limbaj, aici era [http://halogen.note.amherst.edu/~jdtang/scheme_in_48/tutorial/overview.html o implementare de Scheme.] A aparut si sub forma de wikibook. Vedeti si pagina de proiecte.
Summary:
Please note that all contributions to HaskellWiki are considered to be released under simple permissive license (see
HaskellWiki:Copyrights
for details). If you don't want your writing to be edited mercilessly and redistributed at will, then don't submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
DO NOT SUBMIT COPYRIGHTED WORK WITHOUT PERMISSION!
Cancel
Editing help
(opens in new window)
Toggle limited content width