上下文无关语法 BNF
Context Free Grammar BNF
需要非扩展 BNF 语法方面的帮助:
Σ = {a,b,c}
L = {ω ɛ Σ^* | such that all a's (if any) comes before all c's(if any)}
例如,字符串 aba、cbc 和 abacbc 在该语言中,但字符串 abcabc 不是。
这是我目前所知道的(正确吗?如果我错了请指正):
s->asbsc|bsasc|ascsb|ɛ
a's
和c's
的数量需要一样吗?如果不是,那么您就错过了它们不同的情况,例如:aac
。我认为这样的事情应该可行:
S -> AC
A -> aA | bA | ε
C -> bC | cC | ε
A
产生式用于推导不是 c
的字符序列,C
产生式用于推导不是 a
。
您的评论说您希望 a 和 c 的数量相等,因此请从实现这一点的简单语法开始:
S -> aSc | ε
并添加任意数量的 b before/after/between 那些:
S -> BaScB | B
B -> Bb | ε
请注意,上面的内容没有歧义(甚至是 LR(1))。
如果要允许不同数量的 a 和 c,可以使用相同的方法来避免歧义。仅从 a 和 c 开始:
S -> AC
A -> Aa | ε
C -> Cc | ε
并在每个字符的开头和后面添加 b:
S -> BAC
A -> AaB | ε
C -> CcB | ε
B -> Bb | ε
需要非扩展 BNF 语法方面的帮助:
Σ = {a,b,c}
L = {ω ɛ Σ^* | such that all a's (if any) comes before all c's(if any)}
例如,字符串 aba、cbc 和 abacbc 在该语言中,但字符串 abcabc 不是。
这是我目前所知道的(正确吗?如果我错了请指正):
s->asbsc|bsasc|ascsb|ɛ
a's
和c's
的数量需要一样吗?如果不是,那么您就错过了它们不同的情况,例如:aac
。我认为这样的事情应该可行:
S -> AC
A -> aA | bA | ε
C -> bC | cC | ε
A
产生式用于推导不是 c
的字符序列,C
产生式用于推导不是 a
。
您的评论说您希望 a 和 c 的数量相等,因此请从实现这一点的简单语法开始:
S -> aSc | ε
并添加任意数量的 b before/after/between 那些:
S -> BaScB | B
B -> Bb | ε
请注意,上面的内容没有歧义(甚至是 LR(1))。
如果要允许不同数量的 a 和 c,可以使用相同的方法来避免歧义。仅从 a 和 c 开始:
S -> AC
A -> Aa | ε
C -> Cc | ε
并在每个字符的开头和后面添加 b:
S -> BAC
A -> AaB | ε
C -> CcB | ε
B -> Bb | ε