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上的维基百科条目开始,然后按照它的引用继续。祝你好运