用于定义编程语言的 Haskell
我曾在谷歌上搜索过,试图找到一个使用 Haskell 定义简单语言的简单示例,但无济于事。
我确实在 stackoverflow 上找到了这篇文章,给出了一个类似的例子,但是当我实现它时,它似乎没有工作:
Haskell - How to best to represent a programming language's grammar?
an example expression in this language would be:
if true then x else (if false then y else true) Your Haskell data type would look something like this:
data Expr = Var String
| Lit Bool
| If Expr Expr Expr
然而,当我将 if true then x else (if false then y else true) 作为输入输入控制台时,它提示“x”不可解释。它也不喜欢 true 和 false。
编辑:最后我也确实导出了“show”
请您参考如下方法:
创建编程语言有几个常见的步骤(当然还有其他步骤):
- 将程序文本解析成语法树
- 遍历语法树,用它做点什么(解释、编译、收集统计数据)
您显示的data Expr
将是语法树的一部分。 if true then ...
是程序文本。您需要某种方式从文本到树:您需要一个解析器。
或者,您可以使用 Haskell 作为您的解析器,并将语法树编写为 Haskell 代码:
If True "it's true!" (If False "uh-oh" "it's false")
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。