Parsování

Regulární výrazy

Regulární výrazy nám umožňují pokročilé zpracování vstupního textu podle zadaného vzorku. Haskell obsahuje několik modulů pro práci s regulárními výrazy, my se blíže podíváme na základní posixovou implementaci Text.Regex.Posix, která je popsána v knize Real World Haskell.

Parsec

Základní regulární výrazy (tj. bez neregulárních rozšíření) mají mnohem menší sílu než syntaktické analyzátory (parsery). Příkladem jazyka, který nelze zcela zpracovat pomocí regulárních výrazů, je např. zdrojový kód Haskellu. Máme proto k dispozici několik generátorů syntaktických analyzátorů, z nichž je nejpoužívanější Text.ParserCombinators.Parsec (v novější verzi Text.Parsec, dá se nainstalovat pomocí příkazu cabal install parsec3), který umí generovat i lexikální analyzátory. Parsec využívá k analýze tzv. kombinátory, což jsou vlastně jednoduché funkce, pomocí nichž vytváříme složitější analyzátory.

K dispozici máte slajdy z přednášky o Parsecu Grahama Huttona z univerzity v Nottinghamu, článek Maria Langa, kde je ukázán jednoduchý příklad použití, a tutoriál v knize Real World Haskell.

Často používanou alternativou k Parsecu je kombinace lexikálního analyzátoru Alex (vychází z céčkových generátorů lexikálních analyzátorů lex a flex) a syntaktického analyzátoru Happy (založeno na céčkových generátorech parserů bison a yacc).

← IB016