Context-free grammar 与 BNF,ASN.1
道生一,一生二,二生三,三生万物
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相关推荐
- 前端必读:浏览器内部工作原理
前端必读:浏览器内部工作原理 作者: Tali Garsiel 发布时间: 2012-02-09 14:32 阅读: 2133 次 原文链接 全屏阅读 [收藏] http://kb.c ...
- Browser Page Parsing Details
Browser Work: 1.输入网址. 2.浏览器查找域名的IP地址. 3. 浏览器给web服务器发送一个HTTP请求 4. 网站服务的永久重定向响应 5. 浏览器跟踪重定向地址 现在,浏 ...
- 浏览器是如何工作的?(转载)
文章引用地址:http://www.iefans.net/liulanqi-ruhe-gongzuo-yuanli/ 作者:iefans 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 ...
- 现代浏览器的工作原理
英文原文:Tali Garsiel,编译:zzzaquarius 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到goo ...
- 【转载】现代浏览器的工作原理
原文:http://taligarsiel.com/Projects/howbrowserswork1.htm 编译:zzzaquarius http://blog.jobbole.com/1274 ...
- How browsers work
原文:http://taligarsiel.com/Projects/howbrowserswork1.htm 简介 浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工作原理,我们将看到,从你在 ...
- 【转】现代浏览器的工作原理
原文地址:http://www.cnblogs.com/jzxx/p/6090213.html 英文原版:http://taligarsiel.com/Projects/howbrowserswork ...
- 自然语言处理和编译器的对比
知无言说,无言说故:智慧不生,有无即离.皆不可得故,自性定无. - 佛性论 从早餐阅读,到处理电子邮件,再到电商购物,每天面对各种工作上的和生活中的信息,文本是我们需要处理的最主要的数据形式,即便是图 ...
- How Broswer Work
浏览器可以被认为是使用最广泛的软件,本文将介绍浏览器的工 作原理,我们将看到,从你在地址栏输入google.com到你看到google主页过程中都发生了什么. 将讨论的浏览器 今天,有五种主流浏览器- ...
最新文章
- 有没搞错?Java 对象不使用时要赋值为 null?
- Microbiome:宏基因组分箱流程MetaWRAP安装和数据库布置
- 独家 | 基于Python的遗传算法特征约简(附代码)
- Office下Word直接转换成Pdf格式!
- java中字符串压缩成bcd码_Java 压缩 / 解压缩字符串
- 计算机程序无法运行,win7电脑程序打不开解决方法
- 【网络通信与信息安全】之深入解析TCP与UDP传输协议
- java基础---集合collection的方法介绍
- hue迁移数据库到mysql
- UNIX(多线程):21---线程池实现原理
- yum安装nginx,并配置静态资源服务器
- Java之添加环境变量
- Linux下的内核测试工具——perf使用简介
- 微信公众平台自动回复详解
- html5 渐变动画效果图,html5+css3城市场景动画_觉唯设计
- 深入浅出JDBC核心技术
- C语言指针相关——经典面试题
- 计算机基础知识学习第一课,第一课计算机基础知识~.ppt
- 安卓开发之-编写第一个java程序HellowWorld
- 雪落庭院中,围炉话飞鸿——宜盾普GEN5取暖器体验札记
热门文章
- android字符串+数字变量方法之%1$s、%1$d的用法
- python音频 降噪_python - 使用pyaudio对音频播放进行降噪 - 堆栈内存溢出
- 认知仿真:是复杂系统建模的新途径吗
- 02 离线安装管理ceph图形化界面calamari
- Ceph管理平台Calamari的架构与功能分析
- 【TcaplusDB知识库】表操作—如何克隆表结构
- 2021.3.14学习随笔
- 香港伦敦金交易平台排行榜(2022最新版)
- java/php/net/python加油站收费系统设计
- 华为鸿蒙 OS 2.0 系统流畅度实测:差距到底多大?