一个上下文无关文法(CFG)G是一个四元组(V,Σ,R,S),其中:
- V:非终止符号的集合
- Σ:终止符号的集合(V ∩ Σ = Ǿ)
- R:规则的集合(R:V →(V U Σ)*)
- S:起始符号
CFG的示例:
- V = {q,f}
- Σ = {0,1}
- R = {q → 11q,q → 00f,f → 11f,f → ε}
- S = q
- R= {q → 11q | 00f,f → 11f | ε}
据我所知,BNF是表示上下文无关文法中显示的内容的另一种方法。
BNF的示例:
[number] ::= [digit] | [number] [digit]
[digit] ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
这可以解读为:
“一个数字是一个数字,或者是任何一个数字后跟另一个数字”
“一个数字是0、1、2、……9中的任意一个字符”
这两种表示方法的符号有一些差别,即:
- -->等于::=
- |等于or
除此之外,可能还存在其他差异,但说实话我不知道其他差异。
字符串派生:
设S为“起始”符号
- S --> A,初始状态
- A --> 0A
- A --> 1B
- A --> ?
- B --> 1B
- B --> ?
字符串派生的示例:
这个文法是否生成字符串000111?
是的,它生成了。
- S --> A
- A --> 0A
- 0A --> 00A
- 00A --> 000A
- 000A --> 0001B
- 0001B --> 00011B
- 00011B --> 000111
我就说这些了,我也在努力学习,并且如果我了解更多有关定义语言语法的细节,一定会分享给大家。
干杯!
A
和B
是非终端符号
,而0
和1
是终端符号
。 - Hugh Perkins