0

所以我有一个逻辑语句,例如“((A o B)a B)o(B a C)”,我想将括号内的每组语句解析为列表中的每个部分......这就是我到目前为止,但由于我是 haskell 的新手,我不知道我是否在正确的轨道上编辑:我现在又有了。所以现在的问题是两件事!!(1)当我现在运行它时,我无法返回字符串列表(2)我得到意外的'('

statement :: Parser String
statement =  many (letter <|> space ) >> parenStatement

parenStatement :: Parser [String]
parenStatement = do
    char '('
    answer <- statement
    char ')'
    return answer
4

1 回答 1

3

大概你有一些代表逻辑语句的数据类型。

data Statement = Conjunction Statement Statement
               | Disjunction Statement Statement
               -- etc

大概您最终希望能够解析逻辑语句。

statement :: Parser Statement
statement = conjunction <|> disjunction <|> parenthesisisedStatement -- etc

解析被括号包围的语句就是

parenthesisisedStatement :: Parser Statement
parenthesisisedStatement = do
    char '('
    answer <- statement
    char ')'
    return parenthesisisedStatement

编辑:(因为这不适合评论)

您似乎正在尝试将输入字符串标记为字符串列表(您稍后可能会将其输入解析器)。您似乎没有尝试将输入字符串解析为适当限制其可能包含的内容的数据结构。

如果您真的想标记您的输入,我建议您在新的顶级问题中再次提问。

但是您可能最好将输入解析为适当的数据结构,因此请考虑如何最好地表示语句,而不是 到处使用字符串

于 2013-04-23T19:11:19.680 回答