Difference between revisions of "Monada parserelor"

From HaskellWiki
Jump to: navigation, search
m
Line 1: Line 1:
Realizarea unui parser modular din parsere mai mici, fie ca ele sunt din biblioteca ParseLib sau din biblioteca Parsec nu se poate face daca nu exista o structura algebrica a combinarii lor. E la fel ca la operatiile cu numere. Acolo calculele cu numere n-ar decurge asa cum stim daca n-ar exista proprietatile algebrice ale structurilor formate de numere (grup, corp, inel formate cu numerele Reale, de exemplu).
+
Realizarea unui parser modular din parsere mai mici, fie ca ele sunt din biblioteca ParseLib sau din biblioteca Parsec nu se poate face daca nu exista o structura algebrica a combinarii lor. E la fel ca la operatiile cu numere. Acolo calculele cu numere n-ar decurge asa cum stim daca n-ar exista proprietatile algebrice ale structurilor formate de numere (grup, corp, inel - structuri formate cu numerele Reale, de exemplu).
   
Pentru a descrie monada parsererlor trebuie definiti cei doi operatori:>>== si return. Ceea ce se face ca mai jos: <br>
+
Pentru a descrie monada parsererlor trebuie definiti cei doi operatori:>>= si return. Ceea ce se face ca mai jos: <br>
   
 
<nowiki>
 
<nowiki>

Revision as of 21:04, 27 January 2007

Realizarea unui parser modular din parsere mai mici, fie ca ele sunt din biblioteca ParseLib sau din biblioteca Parsec nu se poate face daca nu exista o structura algebrica a combinarii lor. E la fel ca la operatiile cu numere. Acolo calculele cu numere n-ar decurge asa cum stim daca n-ar exista proprietatile algebrice ale structurilor formate de numere (grup, corp, inel - structuri formate cu numerele Reale, de exemplu).

Pentru a descrie monada parsererlor trebuie definiti cei doi operatori:>>= si return. Ceea ce se face ca mai jos:

instance Monad Parser where
return a = Parser (\cs -> [(a,cs)])
p >>= f = Parser (\cs -> concat [ parse (f a) cs' | (a,cs') <- parse p cs])

dar nu uitati sa indentati ultimele doua randuri. Iar functia parse e definita:

parse :: Parser a -> String -> [(a,String)]
parse (parser p) = p

Monada este folosita la realizarea front-end-urilor de interpretoare.

Aici mai sunt multe de adaugat. Pagina mai trebuie dezvoltata.