Главная » Haskell » Модуль Read

0

В модуле Read определены  программные сущности, позволяющие  преобразовывать строки в значения произвольных типов. Этот  модуль, как и многие иные в стандартной поставке, является экспериментальным, созданным с целью разгрузки  стандартного модуля  Prelude  от программных сущностей. Правда, необходимо отметить,  что  в этом модуле для компилятора  GHC имеются расширенные  возможности по использованию функций синтаксического анализа. В частности, создана улучшенная версия класса Read (см. стр. 121), которая позволяет производить  более эффективный синтаксический анализ.

Использование модуля:

import  Text.Read

Большинство программных сущностей из этого модуля также  определены в стандартном модуле Prelude, а потому описаны ранее в этом справочнике. К таким программным сущностям относятся уже упоминавшийся класс Read, а также функции read (см. стр. 152), reads (см. стр. 156), readParen (см. стр. 156) и lex

(см. стр. 141). Ниже описываются только дополнительные программные сущности.

Тип: Lexeme

Описание: тип для представления лексем различных типов. Каждый конструктор отвечает за определённый тип лексем, которые могут встретиться при разборе конструкций при помощи методов класса Read.

Определение:

data  Lexeme

= Char Char

| String String

| Punc String

| Ident String

| Symbol String

| Int Integer

| Rat  Rational

| EOF

Конструктор  Char отвечает за символы (обычно используемые  в  качестве идентификаторов). Конструктор String отвечает за символьные последовательности, в нём содержатся проинтерпретированные escape-коды. Конструктор Punc представляет символы пунктуации. Конструктор Ident описывает идентификаторы языка Haskell. Также и конструктор Symbol описывает символьные операции языка Haskell (например, (:%) и т. д.). Конструкторы Int и Rat описывают целые и действительные числа соответственно. Наконец, конструктор EOF описывает символ конца файла.

Данный тип имеет экземпляры  следующих  классов: Eq, Read и Show.

Функция: lexP

Описание: производит синтаксический анализ одной лексемы.

Определение:

lexP  ::  ReadPrec  Lexeme lexP  =  lift  L.lex

Функция: parens

Описание: производит синтаксический анализ выражения в скобках  (в произвольном количестве правильно расставленных, согласованных скобок).

Определение:

parens  :: ReadPrec a ->  ReadPrec a parens  p =  optional

where

optional   = p +++  mandatory mandatory = do  L.Punc  "(" < lexP

x                   < reset  optional L.Punc  ")"  < lexP

return  x

Функция: readListDefault

Описание: функция, заменяющая собой метод readList класса Read. Используется только в стандартной поставке компилятора GHC.

Определение:

readListDefault :: Read a => ReadS  [a]

Функция определена в виде примитива.

Функция: readListPrecDefault

Описание: функция, заменяющая собой метод readPrec класса Read. Используется только в стандартной поставке компилятора GHC.

Определение:

readListPrecDefault :: Read a => ReadPrec [a]

Функция определена в виде примитива.

Необходимо отметить, что данный модуль предоставляет  базовые, а  оттого примитивные средства для проведения синтаксического  анализа. В поставке библиотек языка Haskell имеется мощная библиотека, заточенная специально для решения задач синтаксического анализа и смежных проблем. Наименование  этой библиотеки  — Parsec, основана она на монадах и предоставляет приятный синтаксис для написания парсеров. Рассмотрение этой библиотеки выходит за рамки этого небольшого справочника.

Источник: Душкин Р. В., Справочник по языку Haskell. М.: ДМК Пресс, 2008. 544 с., ил.

По теме:

  • Комментарии