Parsing 如何在Haskell中构建解析器
这是我的用户定义数据类型。我想使用上述数据类型处理算术表达式,如Parsing 如何在Haskell中构建解析器,parsing,haskell,Parsing,Haskell,这是我的用户定义数据类型。我想使用上述数据类型处理算术表达式,如(2+3*4-x),而不使用buildExpression解析器。我能做什么 请帮帮我,它应该能处理操作员优先权 假设我们想要构建一个addsub级解析器。我们想说的是(忽略正确值的实际返回,只关注原始解析) 这真的不管用。但我们可以把这个因素作为 addsub = muldiv >> oneOf "+-" >> muldiv 我们假设muldiv是一个仅用于乘法和除法的解析器,您可以用类似的方式编写它 也
(2+3*4-x)
,而不使用buildExpression
解析器。我能做什么
请帮帮我,它应该能处理操作员优先权 假设我们想要构建一个
addsub
级解析器。我们想说的是(忽略正确值的实际返回,只关注原始解析)
这真的不管用。但我们可以把这个因素作为
addsub = muldiv >> oneOf "+-" >> muldiv
我们假设muldiv
是一个仅用于乘法和除法的解析器,您可以用类似的方式编写它
也就是说,不用语法
addsub = muldiv >> addsub'
addsub' = many $ oneOf "+-" >> muldiv
我们使用稍微复杂一点,但实际上可由Parsec使用:
addsub = addsub (+-) muldiv | muldiv
我们当然可以将后者重构成一个
many
,这给了我们一个要添加的表达式列表。然后,您可以将其转换为所需的任何形式,例如(adda1(adda2(adda3))
假设我们要构建addsub
级别的解析器。我们想说的是(忽略正确值的实际返回,只关注原始解析)
这真的不管用。但我们可以把这个因素作为
addsub = muldiv >> oneOf "+-" >> muldiv
我们假设muldiv
是一个仅用于乘法和除法的解析器,您可以用类似的方式编写它
也就是说,不用语法
addsub = muldiv >> addsub'
addsub' = many $ oneOf "+-" >> muldiv
我们使用稍微复杂一点,但实际上可由Parsec使用:
addsub = addsub (+-) muldiv | muldiv
我们当然可以将后者重构成一个
many
,这给了我们一个要添加的表达式列表。然后,您可以将其转换为所需的任何形式,例如(adda1(adda2(adda3))
假设我们要构建addsub
级别的解析器。我们想说的是(忽略正确值的实际返回,只关注原始解析)
这真的不管用。但我们可以把这个因素作为
addsub = muldiv >> oneOf "+-" >> muldiv
我们假设muldiv
是一个仅用于乘法和除法的解析器,您可以用类似的方式编写它
也就是说,不用语法
addsub = muldiv >> addsub'
addsub' = many $ oneOf "+-" >> muldiv
我们使用稍微复杂一点,但实际上可由Parsec使用:
addsub = addsub (+-) muldiv | muldiv
我们当然可以将后者重构成一个
many
,这给了我们一个要添加的表达式列表。然后,您可以将其转换为所需的任何形式,例如(adda1(adda2(adda3))
假设我们要构建addsub
级别的解析器。我们想说的是(忽略正确值的实际返回,只关注原始解析)
这真的不管用。但我们可以把这个因素作为
addsub = muldiv >> oneOf "+-" >> muldiv
我们假设muldiv
是一个仅用于乘法和除法的解析器,您可以用类似的方式编写它
也就是说,不用语法
addsub = muldiv >> addsub'
addsub' = many $ oneOf "+-" >> muldiv
我们使用稍微复杂一点,但实际上可由Parsec使用:
addsub = addsub (+-) muldiv | muldiv
我们当然可以将后者重构成一个
many
,这给了我们一个要添加的表达式列表。然后,您可以将其转换为您想要的任何形式,例如(adda1(adda2(adda3))
我们不能使用buildExpressionParser有什么原因吗?我想这意味着您正在使用parsec。你知道如何对语法进行左因子分析以使其实际有效吗?“buildExpression
parser”可能指的是。我们不能使用buildExpressionParser有什么原因吗?我想这意味着您正在使用parsec。你知道如何对语法进行左因子分析以使其实际有效吗?“buildExpression
parser”可能指的是。我们不能使用buildExpressionParser有什么原因吗?我想这意味着您正在使用parsec。你知道如何对语法进行左因子分析以使其实际有效吗?“buildExpression
parser”可能指的是。我们不能使用buildExpressionParser有什么原因吗?我想这意味着您正在使用parsec。您知道如何对语法进行左因子分析以使其实际有效吗?“buildExpression
parser”可能指的是。