什么是无上下文语法和巴克斯Naur形式?

时间:2011-07-10 12:11:31

标签: syntax context-free-grammar bnf

有人可以用非专业人士的说法解释:

  1. 什么是无上下文语法?

  2. Backus Naur表格是什么?

  3. 如何使用这种表示法?

  4. 如何进行字符串派生?

  5. 如何描述语言语法?

2 个答案:

答案 0 :(得分:6)

无上下文语法(CFG)G是四元组(V,Σ,R,S)其中

  • V:一组非终端符号
  • Σ:一组终端(V∩Σ=Ǿ)
  • R:一组规则(R:V→(VUΣ)*)
  • S:开始符号

CFG示例:

  • V = {q,f,}
  • Σ= {0,1}
  • R = {q→11q,q→00f,f→11f,f→ε}
  • 取值= Q
  • (R = {q→11q | 00f,f→11f |ε})

据我了解,Backus Naur Form(BNF)是另一种表示Context Free Grammar(CFG)中显示的事物的方式

BNF的例子:

[number] :: = [digit] | [编号] [数字]

[digit] :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

可以读作以下内容: “数字是一个数字,或任何数字后跟一个额外的数字” (这是一种扭曲但精确的方式,表示数字由一个或多个数字组成) “一个数字是字符0,1,2,...... 9中的任何一个”

差:

这两种表示的符号有点不同,i-e

- > equals :: =

|等于或

必须有其他一些差异,但说实话,我不知道其他任何差异:)

字符串派生:

让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

这一切都在我身边,我也正在努力,如果我开始了解有关定义语言语法的详细信息,我一定会分享。

喝彩!

答案 1 :(得分:4)

无上下文语法是一种形式语言。 Backus Naur形式是这种语法的规范语言。它用于描述语言语法 你应该阅读:
http://en.wikipedia.org/wiki/Formal_language_theory
http://en.wikipedia.org/wiki/Context-free_grammar
http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form