Regex 我们可以使用DFA解析上下文无关语法指定的常规语言并生成解析树吗?

Regex 我们可以使用DFA解析上下文无关语法指定的常规语言并生成解析树吗?,regex,context-free-grammar,regular-language,dfa,parse-tree,Regex,Context Free Grammar,Regular Language,Dfa,Parse Tree,如我们所知,DFA可用于以常规语言验证字符串 例1。L=ac(b)*bcb | ad(b)*bb。DFA可以验证字符串“acbbbcb”是否正确 此外,有时,一种规则语言可以用CFG表示 例2 S->“a”a“b” A->“c”B“c”|“d”B B->“B”B |“B” 上述CFG生成的语言就是示例1中的正则表达式 这意味着,我们可以使用DFA来验证此CFG生成的(常规)字符串。但是,我们如何生成相应的解析树呢?所有常规语言都有一个CFG 因为DFA除了接受/拒绝之外没有任何输出,所以严格

如我们所知,DFA可用于以常规语言验证字符串

例1。L=ac(b)*bcb | ad(b)*bb。DFA可以验证字符串“acbbbcb”是否正确

此外,有时,一种规则语言可以用CFG表示

例2

  • S->“a”a“b”
  • A->“c”B“c”|“d”B
  • B->“B”B |“B”
上述CFG生成的语言就是示例1中的正则表达式


这意味着,我们可以使用DFA来验证此CFG生成的(常规)字符串。但是,我们如何生成相应的解析树呢?

所有常规语言都有一个CFG

因为DFA除了接受/拒绝之外没有任何输出,所以严格来说它不能构建解析树。然而,我不明白为什么不能为每种语言至少提供一些DFA,这些DFA可以通过生成树的副作用来增强(假设语法是明确的)。这可能需要DFA的构建反映语法的结构,因此不一定是最小的


如果语法不明确,那么正如Gunther所写,DFA很可能不足以用于构建树。

所有常规语言都有CFG

因为DFA除了接受/拒绝之外没有任何输出,所以严格来说它不能构建解析树。然而,我不明白为什么不能为每种语言至少提供一些DFA,这些DFA可以通过生成树的副作用来增强(假设语法是明确的)。这可能需要DFA的构建反映语法的结构,因此不一定是最小的

如果语法模棱两可,那么正如Gunther所写,DFA很可能不足以用于构建树。

  • S->“a”a“b”
  • A->“c”B“c”|“d”B
  • B->“B”B |“B”
我认为这可以通过以下方式实现:

假设你有几页纸。在每一页纸上,都有一条产生式规则。最上面的论文有规则S->“a”a“b”。有两个过渡:一个是从“A”到下一页纸,另一个是从下一页纸到这个“A”

在这个方案中,当发生从下一页到当前页的返回转换时,我们知道使用了下一页中的产品

通过这种方式,DFA可以生成解析树。然而,这种DFA更像一棵“树”,而不是“图”

这个方案可能并不完全正确。如果您发现任何问题,请告诉我。

  • S->“a”a“b”
  • A->“c”B“c”|“d”B
  • B->“B”B |“B”
我认为这可以通过以下方式实现:

假设你有几页纸。在每一页纸上,都有一条产生式规则。最上面的论文有规则S->“a”a“b”。有两个过渡:一个是从“A”到下一页纸,另一个是从下一页纸到这个“A”

在这个方案中,当发生从下一页到当前页的返回转换时,我们知道使用了下一页中的产品

通过这种方式,DFA可以生成解析树。然而,这种DFA更像一棵“树”,而不是“图”


这个方案可能并不完全正确。如果您发现任何问题,请让我知道。

您好,同上,我认为您的观点是,这要求DFA根据语法的产生式规则进行镜像。您好,同上,我认为您的观点是,这要求DFA根据语法的产生式规则进行镜像,这不是对您的问题的回答,但不久前我发现了一个“在线正则表达式可视化工具”:这不是对您的问题的回答,但不久前我发现了一个“在线正则表达式可视化工具”: