如何解析上下文相关语法



CSG类似于CFG,但减号是倍数。

那么,我可以只使用CFG解析器来解析CSG,同时将生产减少到多个终端还是非终端?

1. S → a bc
2. S → a S B c
3. c B → W B
4. W B → W X
5. W X → B X
6. B X → B c
7. b B → b b

当我们遇到W X时,我们可以将W X简化为W B吗?

当我们遇到W B时,我们可以将W B简化为c B吗?

所以,如果CSG语法分析器是基于CFG语法分析器的,那么编写起来就不难了,是真的吗?

但当我查看wiki时,它说要解析CSG,我们应该使用linear bounded automaton

什么是linear bounded automaton

上下文敏感语法是不确定的。因此,不能仅仅因为RHS在派生中的某个点上是可见的,就认为会发生减少。

LBA(线性有界自动机)也是非确定性的,因此它们并不是一种真正实用的算法。(你可以用回溯来模拟一个,但执行解析可能需要的时间没有方便的限制。)它们是CSG的接受者这一事实对解析理论来说很有趣,但对解析实践来说却不是很有趣。

正如CFG一样,也有不同类别的CSG。CSG的一些受限子类更容易解析(例如,CFG是一个子类),但我不相信有太多关于实际用途的研究;在实践中,CSG很难编写,并且没有明显的解析树的类似物可以从派生中构建。

为了获得更多的阅读,您可以从LBA上的维基百科条目开始,然后按照它的引用继续。祝你好运

最新更新