道生一,一生二,二生三,三生万物

https://en.wikipedia.org/wiki/Context-free_grammar

文章目录

  • 1. 名词解释
  • 2. BNF
  • 3. ASN.1

1. 名词解释

Context-free grammar:就是上下文无关文法,是一种形式文法(formal grammar)。形式文法是形式语言(formal language)的文法,由一组产生规则(production rules)组成,描述该形式语言中所有可能的字符串形式。形式文法一般可分为四大类:无限制文法(unrestricted grammars),上下文相关文法,上下文无关文法和正则文法(Regular grammar)。

Terminal symbols: 终结符,可以理解为基础符号,词法符号,是不可替代的,天然存在,不能通过文法规则生成!

Nonterminal symbols: 非终结符,或者句法变量。

Production rules: grammar 是由终结符集和、非终结符集和和产生规则共同组成。产生规则定义了符号之间如何转换替代。规则的左侧是规则头,是可以被替代的符号;右侧是规则体,是具体的内容。

例如:

<digit> ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
<integer> ::= ['-'] <digit> {<digit>}

符号(-,0,1,2,3,4,5,6,7,8,9)是终结符,符号(<digit>,<integer>)是非终结符。那么根据 integer 的生成规则,字符串 “0056, 0000, -000, -111” 都符合文法,可被解析。

再例如:

S -> cAd
A -> a|ab

该例中,(a, b, c, d) 为终结符,(S, A) 为非终结符,字符串"cad",“cabd” 符合文法规则。

2. BNF

在语言学中,Context-free grammar 常被称为短语结构文法(phrase structure grammar );在计算机领域,Context-free grammar 被称为 Backus normal form (BNF)。

BNF 主要用于对编程语言、文档格式、指令集、或者通信协议等的语法定义。它的应用非常广泛,大到使用BNF定义编程语言和语法规则(编程语言,SQL语法)、指令集,小到使用BNF编写伪代码,以便于他人也能够读懂其中的含义。

BNF的核心是推导规则(产生式)、约定符号和关键字(文本约定),使用这些约定的符号和产生式就可以完成某种语义的描述。

Cassandra 使用改进型的BNF来定义CQL语法:

例如:

关键字

identifier          ::=  unquoted_identifier | quoted_identifier
unquoted_identifier ::=  re('[a-zA-Z][a-zA-Z0-9_]*')
quoted_identifier   ::=  '"' (any character where " can appear if doubled)+ '"'

常量

constant ::=  string | integer | float | boolean | uuid | blob | NULL
string   ::=  '\'' (any character where ' can appear if doubled)+ '\'''$$' (any character other than '$$') '$$'
integer  ::=  re('-?[0-9]+')
float    ::=  re('-?[0-9]+(\.[0-9]*)?([eE][+-]?[0-9+])?') | NAN | INFINITY
boolean  ::=  TRUE | FALSE
uuid     ::=  hex{8}-hex{4}-hex{4}-hex{4}-hex{12}
hex      ::=  re("[0-9a-fA-F]")
blob     ::=  '0' ('x' | 'X') hex+

BNF定义自身的例子

syntax   :=  { rule }rule     :=  identifier  ":="  expressionexpression:=  term { "|" term }term     :=  factor { factor }factor   :=  identifier |quoted_symbol |"("  expression  ")" |"["  expression  "]" |"{"  expression  "}"identifier:=  letter { letter | digit }quoted_symbol:= """ { any_character } """

该段的含义是:

  • syntax 由一个或多个 rule 组成;
  • rule 由 identifier 加上符号 := 和 expression 表示;
  • expression 由一个或多个由 | 分割的 term 组成;
  • term 由一个或多个 factor 组成;
  • factor 由 identifier 或 quoted_symbol 或 3 种括号括起来的 expression 表示;
  • identifier 由字符或者数字组成;
  • quoted_symbol 由双引号括起来的任何字符组成;

3. ASN.1

BNF 标记了 ASN.1, 使它称为一种抽象的数据描述语言,类似于编程语言,ASN.1 也有相应的语法。ASN.1 种的基本元素包括:标识符,关键字,基本词汇/词。由这些基本的元素和类型,可推导出更复杂的、抽象的数据类型和结构。

ASN.1: Specification of basic notation

ASN.1 中常见的符号及含义:

Context-free grammar 与 BNF,ASN.1相关推荐

  1. 前端必读:浏览器内部工作原理

    前端必读:浏览器内部工作原理 作者: Tali Garsiel  发布时间: 2012-02-09 14:32  阅读: 2133 次  原文链接   全屏阅读  [收藏]   http://kb.c ...

  2. Browser Page Parsing Details

    Browser Work: 1.输入网址.  2.浏览器查找域名的IP地址.  3. 浏览器给web服务器发送一个HTTP请求  4. 网站服务的永久重定向响应  5. 浏览器跟踪重定向地址 现在,浏 ...

  3. 浏览器是如何工作的?(转载)

    文章引用地址:http://www.iefans.net/liulanqi-ruhe-gongzuo-yuanli/ 作者:iefans 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 ...

  4. 现代浏览器的工作原理

    英文原文:Tali Garsiel,编译:zzzaquarius 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到goo ...

  5. 【转载】现代浏览器的工作原理

    原文:http://taligarsiel.com/Projects/howbrowserswork1.htm 编译:zzzaquarius  http://blog.jobbole.com/1274 ...

  6. How browsers work

    原文:http://taligarsiel.com/Projects/howbrowserswork1.htm 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在 ...

  7. 【转】现代浏览器的工作原理

    原文地址:http://www.cnblogs.com/jzxx/p/6090213.html 英文原版:http://taligarsiel.com/Projects/howbrowserswork ...

  8. 自然语言处理和编译器的对比

    知无言说,无言说故:智慧不生,有无即离.皆不可得故,自性定无. - 佛性论 从早餐阅读,到处理电子邮件,再到电商购物,每天面对各种工作上的和生活中的信息,文本是我们需要处理的最主要的数据形式,即便是图 ...

  9. How Broswer Work

    浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到google主页过程中都发生了什么. 将讨论的浏览器 今天,有五种主流浏览器- ...

最新文章

  1. 有没搞错?Java 对象不使用时要赋值为 null?
  2. Microbiome:宏基因组分箱流程MetaWRAP安装和数据库布置
  3. 独家 | 基于Python的遗传算法特征约简(附代码)
  4. Office下Word直接转换成Pdf格式!
  5. java中字符串压缩成bcd码_Java 压缩 / 解压缩字符串
  6. 计算机程序无法运行,win7电脑程序打不开解决方法
  7. 【网络通信与信息安全】之深入解析TCP与UDP传输协议
  8. java基础---集合collection的方法介绍
  9. hue迁移数据库到mysql
  10. UNIX(多线程):21---线程池实现原理
  11. yum安装nginx,并配置静态资源服务器
  12. Java之添加环境变量
  13. Linux下的内核测试工具——perf使用简介
  14. 微信公众平台自动回复详解
  15. html5 渐变动画效果图,html5+css3城市场景动画_觉唯设计
  16. 深入浅出JDBC核心技术
  17. C语言指针相关——经典面试题
  18. 计算机基础知识学习第一课,第一课计算机基础知识~.ppt
  19. 安卓开发之-编写第一个java程序HellowWorld
  20. 雪落庭院中,围炉话飞鸿——宜盾普GEN5取暖器体验札记

热门文章

  1. android字符串+数字变量方法之%1$s、%1$d的用法
  2. python音频 降噪_python - 使用pyaudio对音频播放进行降噪 - 堆栈内存溢出
  3. 认知仿真:是复杂系统建模的新途径吗
  4. 02 离线安装管理ceph图形化界面calamari
  5. Ceph管理平台Calamari的架构与功能分析
  6. 【TcaplusDB知识库】表操作—如何克隆表结构
  7. 2021.3.14学习随笔
  8. 香港伦敦金交易平台排行榜(2022最新版)
  9. java/php/net/python加油站收费系统设计
  10. 华为鸿蒙 OS 2.0 系统流畅度实测:差距到底多大?