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

0

является дополнительным модулем для проведения синтаксического анализа, в который вынесены функции непосредственного разбора входных строк на лексемы. В этом модуле также определён тип Lexeme (см. стр. 532), ко-

торый используется для представления лексем. Также здесь определена главная функция, осуществляющая лексический просмотр входных строк. Дополнительно определены несколько утилитарных функций для разбора различных числовых значений.

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

import  Text.Read.Lex

Функция: hsLex

Описание: производит синтаксический анализ строки, которая понимается в качестве строки исходного кода на языке Haskell. Данная функция вызывает функцию lexToken, которая и осуществляет лексический анализ, но которая в то же время достаточно громоздка. Любознательный читатель может обратиться к исходному коду модуля, чтобы изучить способ разбора, предлагаемый этой функцией.

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

hsLex ::  ReadP  String hsLex =  do  skipSpaces

(s, _)  < gather  lexToken return s

Функция: readIntP

Описание: производит синтаксический анализ строки,  представляющей  число в произвольной системе счисления.

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

readIntP :: Num  a => a ->  (Char  ->  Bool)   ->  (Char  ->  Int)  ->  ReadP  a readIntP base isDigit valDigit = do s  < munch1  isDigit

return (val base 0 (map valDigit s))

readIntP’ :: Num  a =>  a  ->  ReadP  a

readIntP’ base = readIntP base  isDigit valDigit where

isDigit  c  = maybe False  (const True)  (valDig base c) valDigit c  = maybe 0 id  (valDig base c)

Функция: readOctP

Описание: производит синтаксический анализ строки,  представляющей  число в восьмиричной  системе счисления.

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

readOctP :: Num  a =>  ReadP  a readOctP =  readIntP’ 8

Функция: readDecP

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

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

readDecP :: Num  a =>  ReadP  a readDecP =  readIntP’ 10

Функция: readHexP

Описание: производит синтаксический анализ строки,  представляющей  число в шестнадцатиричной  системе счисления.

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

readHexP :: Num  a =>  ReadP  a readHexP =  readIntP’ 16

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

По теме:

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