Articulo de referencia

Parsec (analizador)

Parsec es una biblioteca para escribir analizadores sintácticos escritos en el lenguaje de programación Haskell . [3] Se basa en combinadores de analizadores sintácticos de orde...

Parsec es una biblioteca para escribir analizadores sintácticos escritos en el lenguaje de programación Haskell . [3] Se basa en combinadores de analizadores sintácticos de orden superior , por lo que se puede crear un analizador sintáctico complicado a partir de muchos más pequeños. [4] Se ha reimplementado en muchos otros lenguajes, incluidos Erlang , [5] Elixir , [6] OCaml , [7] Racket , [8] F# , [9] [10] y los lenguajes de programación imperativo C# , [11] y Java . [12]

Debido a que un programa basado en un combinador de analizadores sintácticos es generalmente más lento que un programa basado en un generador de analizadores sintácticos , [ cita requerida ] Parsec normalmente se utiliza para lenguajes pequeños de dominio específico , mientras que Happy se utiliza para compiladores como el Glasgow Haskell Compiler (GHC). [13]

Otras bibliotecas combinadoras de analizadores sintácticos Haskell que se han derivado de Parsec incluyen Megaparsec [14] y Attoparsec. [15]

Parsec es un software libre publicado bajo la licencia BSD-3-Clause. [16]

Ejemplo

Los analizadores escritos en Parsec comienzan con analizadores más simples, como los que reconocen ciertas cadenas, y los combinan para crear un analizador con un comportamiento más complicado. Por ejemplo, digitanaliza un dígito y stringanaliza una cadena específica (como "hello").

Las bibliotecas de combinadores de analizadores sintácticos como Parsec proporcionan funciones de utilidad para ejecutar los analizadores sintácticos en valores reales. Un analizador sintáctico que reconoce un solo dígito de una cadena se puede dividir en dos funciones: una para crear el analizador y una mainfunción que llama a una de estas funciones de utilidad ( parseen este caso) para ejecutar el analizador sintáctico:

import Text.Parsec -- tiene funciones de utilidad de análisis general import Text.Parsec.Char -- contiene combinadores básicos específicos type Parser = Stream s m Char => ParsecT s u m String       
  
            

parser :: Analizador parser = cadena "hola"  
   

main :: IO () main = print ( parse parser "<test>" "hola mundo" ) -- imprime 'Derecho "hola"'   
      

Definimos un Parsertipo para que la firma de tipo sea parsermás fácil de leer. Si quisiéramos modificar este programa, por ejemplo, para leer la cadena "hello"o la cadena "goodbye", podríamos usar el operador <|>, proporcionado por la Alternativeclase de tipo, para combinar dos analizadores en un solo analizador que intente:

parser = cadena "hola" <|> cadena "adiós"      

Referencias

  1. ^ "parsec 2.0". Hackage . Consultado el 3 de septiembre de 2019 .
  2. ^ "Lanzamientos". Github . Consultado el 22 de septiembre de 2024 .
  3. ^ "Parsec en la wiki de Haskell". Wiki de Haskell . Consultado el 29 de mayo de 2017 .
  4. ^ Leijen, Daan; Meijer, Erik (julio de 2001). "Parsec: Combinadores de analizadores monádicos de estilo directo para el mundo real" (PDF) . Microsoft Research . Consultado el 22 de noviembre de 2014 .
  5. ^ "Parsec Erlang". BitBucket . Consultado el 23 de noviembre de 2014 .
  6. ^ "Nimble Parsec". Github . Consultado el 18 de diciembre de 2018 .
  7. ^ "Parsec OCaml" (PDF) . El proyecto de verano de OCaml . Consultado el 23 de noviembre de 2014 .
  8. ^ "Megaparsack: Combinadores de analizadores sintácticos prácticos".
  9. ^ "XParsec por corsis". XParsec . Consultado el 29 de mayo de 2017 .
  10. ^ "FParsec". Quanttec . Consultado el 29 de mayo de 2017 .
  11. ^ "Mónada CSharp". Github . Consultado el 10 de diciembre de 2014 .
  12. ^ "JParsec". Github . Consultado el 14 de octubre de 2016 .
  13. ^ "El compilador Glasgow Haskell (AOSA Vol. 2)". La arquitectura de las aplicaciones de código abierto . Consultado el 23 de noviembre de 2014 .
  14. ^ "megaparsec: Combinadores de analizadores monádicos". Hackage . Consultado el 10 de septiembre de 2018 .
  15. ^ "attoparsec: análisis rápido de cadenas de bytes y texto mediante combinadores". Hackage . Consultado el 10 de septiembre de 2018 .
  16. ^ "Parsec". GitHub . 25 de octubre de 2021.
  • Parsec en la wiki de Haskell
  • Parsec en Hackage
  • parsec en GitHub


Obtenido de "https://es.wikipedia.org/w/index.php?title=Parsec_(analizador)&oldid=1260197612"