Parsing 如何解析上下文敏感语法?
CSG类似于CFG,但reduce符号是多重的 所以,我可以只使用CFG解析器来解析CSG,从而将生产减少到多个终端或非终端吗 像 当我们相遇时,我们能不能把Parsing 如何解析上下文敏感语法?,parsing,context-free-grammar,context-sensitive-grammar,Parsing,Context Free Grammar,Context Sensitive Grammar,CSG类似于CFG,但reduce符号是多重的 所以,我可以只使用CFG解析器来解析CSG,从而将生产减少到多个终端或非终端吗 像 当我们相遇时,我们能不能把wx简化为wb 当我们遇到wb时,我们能不能把wb简化为cb 所以,若CSG解析器是基于CFG解析器的,那个么编写并不困难,是真的吗 但当我查看wiki时,它说要解析CSG,我们应该使用线性有界自动机 什么是线性有界自动机?上下文敏感语法是不确定的。所以你不能仅仅因为RHS在推导过程中的某个点上是可见的,就假设会发生一个缩减 LBA(线性有
wx
简化为wb
当我们遇到wb
时,我们能不能把wb
简化为cb
所以,若CSG解析器是基于CFG解析器的,那个么编写并不困难,是真的吗
但当我查看wiki时,它说要解析CSG,我们应该使用线性有界自动机
什么是线性有界自动机?上下文敏感语法是不确定的。所以你不能仅仅因为RHS在推导过程中的某个点上是可见的,就假设会发生一个缩减 LBA(线性有界自动机)也是非确定性的,因此它们不是一个真正实用的算法。(你可以用回溯来模拟一个,但是对于执行一个解析所需的时间没有方便的限制。)它们是CSG的接受者这一事实对于解析理论来说是有趣的,但对于解析实践来说却不是 与CFG一样,CSG也有不同的类别。CSG的一些受限子类更容易解析(例如,CFG是一个子类),但我不认为有太多关于实际用途的研究;在实践中,CSG很难编写,并且没有明显的类似于可以从派生构造的解析树 要阅读更多内容,您可以从开始,然后按照其引用继续阅读。祝你好运。解析器生成器能够使用语法分析一些简单的上下文敏感模式 可以编写一个上下文敏感规则,该规则匹配
要做或不要做
或要做或不要做
,但不匹配要做或不要做
:
# "_" is whitespace, "word" is a single word
example_rule -> "to" _ word _ "or" _ "not" _ "to" _ word {%
function(d,l, reject) {
if (d[2] !== d[10]) {
return reject;
} else {
return {d.join(" ")};
}
}
%}
那么GLR解析器呢,它可以使用非确定性CFG语法进行详细说明。它可以用来解析CSG吗?@qdwang:不,它不能。但是为什么?只需修改减少到多个冲突的单个非终端到多个冲突的多个非终端组@rici@qdwang:因为无法从左到右解析CSG。对于CFG,如果任何派生都是可能的,则最右边的派生总是可能的。但是不能使用CSG,可能通过将其转换为Prolog来解析这种语言。
# "_" is whitespace, "word" is a single word
example_rule -> "to" _ word _ "or" _ "not" _ "to" _ word {%
function(d,l, reject) {
if (d[2] !== d[10]) {
return reject;
} else {
return {d.join(" ")};
}
}
%}