stringtranslate.com

Parsec (analizador)

Parsec es una biblioteca para escribir analizadores en Haskell . [3] Se basa en combinadores de analizadores de orden superior , por lo que se puede crear un analizador 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] y F# , [9] [10] así como lenguajes imperativos como C#. , [11] y Java . [12]

Debido a que un programa basado en un analizador combinador es generalmente más lento que un programa basado en un generador de analizador , [ cita requerida ] Parsec se usa normalmente para lenguajes pequeños de dominio específico , mientras que Happy se usa para compiladores como GHC . [13]

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

Parsec es un software gratuito publicado bajo la licencia BSD-3-Clause. [dieciséis]

Ejemplo

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

Las bibliotecas combinadoras de analizadores como Parsec proporcionan funciones de utilidad para ejecutar los analizadores en valores reales. Un analizador para reconocer 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:

import Text.Parsec : tiene funciones de utilidad de análisis general import Text.Parsec.Char : contiene combinadores básicos específicos tipo Parser = Stream s m Char => ParsecT s u m String                analizador :: Analizador analizador = cadena "hola"     principal :: IO () principal = imprimir ( parse analizador "<prueba>" "hola mundo" ) - imprime 'Correcto "hola"'         

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

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

Referencias

  1. ^ "pársec 2,0". Hackeo . Consultado el 3 de septiembre de 2019 .
  2. ^ "Lanzamientos". Github . Consultado el 3 de septiembre de 2019 .
  3. ^ "Parsec en la wiki de Haskell". Wiki 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) . Investigación de Microsoft . Consultado el 22 de noviembre de 2014 .
  5. ^ "Parsec Erlang". BitBucket . Consultado el 23 de noviembre de 2014 .
  6. ^ "Pársec ágil". 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: prácticos combinadores de analizadores".
  9. ^ "XParsec por corsis". XParsec . Consultado el 29 de mayo de 2017 .
  10. ^ "FParsec". Quantec . 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 Haskell de Glasgow (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". Hackeo . Consultado el 10 de septiembre de 2018 .
  15. ^ "attoparsec: análisis combinador rápido para cadenas de bytes y texto". Hackeo . Consultado el 10 de septiembre de 2018 .
  16. ^ "Pársec". 25 de octubre de 2021.

enlaces externos