Parsing 如何解析上下文敏感语法?

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(线性有

CSG类似于CFG,但reduce符号是多重的

所以,我可以只使用CFG解析器来解析CSG,从而将生产减少到多个终端或非终端吗

当我们相遇时,我们能不能把
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(" ")};
        }
    }
%}