2013-04-23 95 views
0

所以我有一個邏輯語句,比如「((A o B)a B)o(B a C)」,我想將括號內的每組語句解析爲列表...這是我迄今爲止,但因爲即時通訊新的哈斯克爾我不知道如果IM在正確的軌道上 編輯:我現在再次。 所以現在的問題是兩件事情! (1)我有麻煩返回一個字符串列表 (2)當我運行它,現在我得到意想不到的「(」解析字符串中的括號

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

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

看起來你正在取得進展;繼續堵塞!但我認爲這不適合SO,因爲你不足以理解你的問題,但卻提出了一個真正的問題。 – jberryman 2013-04-23 19:11:33

回答

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 

編輯:(因爲這將不適合評論)

你似乎是試圖tokenise您輸入字符串轉換成字符串列表(你可能稍後送入解析器)。你似乎沒有試圖解析你的輸入字符串到一個數據結構,正確地約束它可能包含的內容。

如果你真的想要tokenise你的意見,我建議再次問一個新的頂級問題。

但你可能關閉解析您輸入合適的數據結構比較好,所以思考如何最好地代表發言don't just usestrings everywhere

+0

數據類型是一個字符串。並感謝您的洞察 – user2150839 2013-04-23 19:15:13

+0

雖然這不使用分離器,並不會給我所有的分離()正確嗎? – user2150839 2013-04-24 00:49:22

+0

@ user2150839看我的編輯。 – dave4420 2013-04-24 01:14:26