gpt4 book ai didi

parsing - 为算术表达式定义一个从左到右的解析器

转载 作者:行者123 更新时间:2023-12-01 03:03:46 25 4
gpt4 key购买 nike

<分区>

我很难在 Haskell 中定义一个从左到右的算术表达式解析器。到目前为止,我所做的是按照“G. Hutton,Haskell 编程”一书定义一个从右到左的解析器。

-- the aexpr integer parser
aexpr_int :: Parser Int
aexpr_int = do
a1 <- aterm_int
s <- sign -- return 1 for "+" and -1 for "-"
a2 <- aexpr_int
return (a1 + (s * a2))
<|>
aterm_int

-- the aterm integer parser
aterm_int :: Parser Int
aterm_int = do
a1 <- aterm_int
char '*'
a2 <- afactor_int
return (a1 * a2);
<|>
do
a1 <- afactor_int
char '/'
a2 <- aterm_int
return (div a1 a2)
<|>
afactor_int

-- afactor_int
afactor_int :: Parser Int
afactor_int = do
token (char '(')
e <- aexpr_int
token (char ')')
return e
<|>
do
s <- sign
ic <- aexpr_int
return (s * ic)
<|>
token int_const

所以这会将 1 - 2 - 3 - 4 解析为 1 - (2 - (3 - 4)),但我希望它解析为 ((1 - 2) - 3) - 4。我怎样才能达到这个结果?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com