使用Parsec进行左保理

时间:2014-04-05 23:30:50

标签: haskell parsec

Helllo, 我有以下语法:

<attribute_value> ::= <spec_constant> | <symbol> | ( <s_expr>*)
<attribute>       ::= <keyword> | <keyword> <attribute_value>

通过阅读tutorial,它表示可以使用buildExpressionParser并执行左因素分析,但没有示例。

有人能举例说明我应该如何使用Parsec解析上述语法,或者只是指向正确的方向?

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

假设您已经拥有

data Keyword
data AttributeValue

data Attribute = KeywordOnly Keyword
               | KeywordWithAttribute Keyword AttributeValue

keyword :: Parser Keyword
attributeValue :: Parser AttributeValue

然后您可以通过首先解析attribute :: Parser Attribute,然后选择解析Keyword,然后将它们组合来实现attribute

attribute :: Parser Attribute
attribute = pack <$> keyword <*> optionMaybe attributeValue
  where
    pack :: Keyword -> Maybe AttributeValue -> Attribute
    pack kw = maybe (KeywordOnly kw) (KeywordWithAttribute kw)

无需改变语法结构。