2014-11-27 1 views
0

Я пытаюсь написать простой лексер, который распознает слова, такие как предлоги. У меня есть списки этих слов в формате CSV. На данный момент у меня есть лексер, который работает, но я, чтобы вводить каждую строку из моего списка индивидуален например .:Написание лексики Haskell, которая соответствует строкам из файла CSV

... 
("before",rest) -> TokenPreposition : lexer rest 
("behind",rest) -> TokenPreposition : lexer rest 
... 

Можно прочитать слова в из файлов CSV? Я знаю, что есть библиотека для разбора CSV-файлов, но я не знаю, как продолжить после этого?

+0

Существует глава в «Real World Haskell», посвященный написания Парсер CSV с библиотекой Parsec: http://book.realworldhaskell.org/read/using-parsec.html – Yuuri

+0

Что вам нужно, чтобы https://hackage.haskell.org/package/cassava не предлагал? – d8d0d65b3f7cf42

+0

Я знаю, как разбирать CSV-файл. Но как только у меня есть список слов, например. prepositions = [..., "before", "behind", ....] и т. д., я не знаю, как использовать его в lexer. Я попытался использовать списки, но не могу заставить его работать – user7533

ответ

0

Вы можете использовать Set String, чтобы сохранить список слов и использовать функцию member, чтобы определить, находится ли слово в наборе.

Вот пример кода. Вход в lexer списки глаголов, существительных и предлогов, а также список слов, которые он классифицирует в соответствии с которым список слово в.

import qualified Data.Set as S 

data Speech = Verb | Noun | Preposition | Other 

-- classify a single word  
classify :: S.Set String -> S.Set String -> S.Set String -> String -> Speech 
classify verbs nouns preps word 
    | S.member word verbs = Verb 
    | S.member word nouns = Noun 
    | S.member word preps = Preposition 
    | otherwise   = Other 

lexer :: [String] -> [String] -> [String] -> [String] -> [Speech] 
lexer vlist nlist plist words = 
    let nouns = S.fromList nlist -- convert each word list into a set 
     verbs = S.fromList vlist 
     preps = S.fromList plist 
    in map (classify verbs nouns preps) words