我正在尝试编写一个识别介词等单词的简单词法分析器。我有CSV格式的这些单词列表。目前我有一个有效的词法分析器,但我不得不单独列出我的列表中的每个字符串,例如:
...
("before",rest) -> TokenPreposition : lexer rest
("behind",rest) -> TokenPreposition : lexer rest
...
是否可以从CSV文件中读取单词?我知道有一个用于解析CSV文件的库但我不知道如何在此之后继续?
答案 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