【发布时间】:2013-05-17 11:16:21
【问题描述】:
我的问题一方面是关于 Applicative 和 Monad 类型类,另一方面是关于 Chomsky 层次结构的上下文无关和上下文敏感语法级别。
我听说类型类和语法级别之间存在对应关系。这种对应关系有多准确?
也就是说,是否可以使用任何比 Applicative 组合子更强大的东西来解析所有上下文无关语法,并且是否所有可以使用不比 Applicative 组合子更强大的东西来解析的语法都是上下文无关的?换句话说,Applicative 类型类是否完全对应于上下文无关文法?
同样的问题,除了用“上下文敏感”代替“上下文无关”和用 Monad 代替应用。
赏金说明:类型类是否对应于语法级别?例如, 是否有一组类型类提供表达式正则语言所需的所有操作,仅此而已?
这个问题的动机是我正在研究一个解析器,并且想根据我使用的组合器来确定我的实现处于哪个语法级别。这可能吗?
【问题讨论】:
-
我认为你的前提是不完整的。
Applicative本身不会让你走得太远,因为你既不能回溯也不能根据输入选择作品。典型的解析器组合器 API 依赖于Alternative和Applicative。 -
@C.A.McCann 是的,这是真的,感谢您指出这一点。
Alternative是否对应于常规语法?我想补充一点,但不确定如何处理Applicative约束。是否有其他一些与常规语法相对应的类型类? -
我不确定。我实际上并不相信这里的联系比
Monad表达Applicative无法表达的因果关系的一般能力更深,因为我看不到任何形式的自然限制(即,不做作为此目的)解析器组合器将导致只能定义表达能力较差的语法。 -
进一步考虑,如果我们假设“拒绝一切”原语可用,我也不清楚单子解析器组合器仅限于上下文无关语言,因为它可以进行任意计算在决定是否在任何时候回溯之前。
标签: haskell grammar monads typeclass applicative