[英]Read in Haskell
可以使用Scheme原語讀取,該原語消耗字符流並輸出s表達式(sexpr)。
我正在嘗試在Haskell中編寫解析器。 相當於什么? 我將如何實現它,以便在傳遞"{+ {- 3 4} 7}"
后返回(list '+ (list '- 3 4) 7)
(或等效值)?
提前致謝。
您最好使用適當的解析庫,例如uu-parsinglib , polyparse或parsec 。
您可以濫用Read
將任意String
解析為某種數據表示形式(必須定義)。
我認為,haskell的所有新手都應該在想知道“我能做些什么?”時提出的第一個問題。 是“類型應該是什么?”。 如果您想做您想做的事,那么我建議像這樣編寫AST:
data AST = Num Int
| Add AST AST
| Sub AST AST
| Mul AST AST
etc.
然后,您可以編寫可能具有以下類型的解析器:
parseAST :: String -> AST
要實際編寫此解析器,您可能需要使用諸如parsec之類的方法,盡管如果語法是您所描述的方式,那么您可以手工編寫自己的解析器,這樣會很好地工作(並幫助您學習)。
從那里,您可以編寫可以評估AST的函數,也可以根據需要對其進行操作。 但重要的是要意識到您不能*在運行時創建新代碼,因為這很可能不是類型安全的,或者根本不是安全的。
*我敢肯定,有很多方法可以做到這一點,但是我認為,培養起步的Haskell程序員在進入更高級的主題之前應該學習的思想更為重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.