编写匹配CSV文件中字符串的Haskell词法分析器

时间:2014-11-27 14:19:45

标签: csv haskell lexer

我正在尝试编写一个识别介词等单词的简单词法分析器。我有CSV格式的这些单词列表。目前我有一个有效的词法分析器,但我不得不单独列出我的列表中的每个字符串,例如:

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

是否可以从CSV文件中读取单词?我知道有一个用于解析CSV文件的库但我不知道如何在此之后继续?

1 个答案:

答案 0 :(得分: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