用于定义编程语言的 Haskell

java哥 阅读:32 2024-08-28 10:21:53 评论:0

我曾在谷歌上搜索过,试图找到一个使用 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.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号