【问题标题】:Context free grammar design - Why is this not allowed?上下文无关语法设计 - 为什么不允许这样做?
【发布时间】:2021-09-10 15:50:47
【问题描述】:

我仍在学习上下文无关语法。我怀疑的一种特殊问题是为某些特定模式提出语法。

例如:

“至少 3 个零。”

为什么不直接想出这样的语法: S -> 000 ? 什么规则禁止这种语法?

【问题讨论】:

  • 没有规则禁止这种语法,这是一种完全合法的语法(它恰好匹配三个零,而不是至少三个零)。你能澄清你的问题吗?
  • @sepp2k 写下来后,我知道我的答案有什么问题。但是,您能否建议一些方法来解决您必须提出 CFG 的此类问题?

标签: programming-languages grammar context-free-grammar


【解决方案1】:

可能会限制您的语法(禁止某些结构)的是您使用的语法形式。在Chomsky normal form (CNF) 中,规则是以下之一:

A → BC
A → a
S → ε

Greibach normal form (GNF) 中的规则是:

A → aBCD...

还有Backus–Naur form,在那里你有更丰富的语法。然后是 Extended Backus–Naur form (EBNF),最多是 Augmented Backus–Naur form (ABNF)。

CNF 中至少有 3 个零:

S → AB
A → ZZ
B → ZB
B → 0
Z → 0

GNF 中至少有 3 个零:

S → 0A
A → 0B
B → 0B
B → 0

BNF 中至少有 3 个零:

<S> ::= "000" <A>
<A> ::= "0" <A> | ""

EBNF 中至少有 3 个零:

S = "000", { "0" }

ABNF 中至少有 3 个零:

S = 3*"0"

一些识别(解析)算法要求语法具有某种形式。因此,您必须转换语法,如果它不在其中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 2013-09-07
    • 1970-01-01
    • 2020-05-01
    • 2011-10-14
    • 2017-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多