我是Haskell的新手,正在从事一项工作,我试图为一种简单的计算器语言提供解析功能。
我已经获得了语法,并且不允许更改它。我试图通过遍历字符串并递归使用解析函数来解决它。
语法应该是
Expr -> Int | -Expr | + Expr Expr | * Expr Expr
Int -> Digit | Digit Int
Digit -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Run Code Online (Sandbox Code Playgroud)
因此,我的函数将使用Expr语言的字符串作为参数,并以这种格式生成抽象语法树
data Ast = Tall Int | Sum Ast Ast | Mult Ast Ast| Min Ast| Var String deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)
Ast应该是抽象的语法树
这就是到目前为止我的解析功能
parseEx :: [String] -> (Ast, [String])
parseEx [] = error "empty string"
parseEx (s:ss) …Run Code Online (Sandbox Code Playgroud)