繁体   English   中英

在Haskell中阅读

[英]Read in Haskell

可以使用Scheme原语读取,该原语消耗字符流并输出s表达式(sexpr)。

我正在尝试在Haskell中编写解析器。 相当于什么? 我将如何实现它,以便在传递"{+ {- 3 4} 7}"后返回(list '+ (list '- 3 4) 7) (或等效值)?

提前致谢。

您最好使用适当的解析库,例如uu-parsinglibpolyparseparsec

可以滥用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM