巴科斯范式

PS: 巴科斯范式,很多的linux手册以及各种软件的官方文档,所有稍微复杂点儿的语法规则几乎都是它定义的!

巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和Peter Naur首先引入的用来描述计算机语言语法的符号集。现在,几乎每一位新编程语言书籍的作者都使用巴科斯范式来定义编程语言的语法规则。  

 
巴科斯范式的内容 

 

双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。
双引号外的字(有可能有下划线)代表着语法部分
尖括号( < > )内包含的为必选项。
方括号( [ ] )内包含的为可选项。
大括号( { } )内包含的为可重复0至无数次的项。
竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。
::= 是“被定义为”的意思。

巴科斯范式示例  

例如用BNF来定义的Java语言中的For语句的实例:

FOR_STATEMENT ::=
"for" "(" variable_declaration (expression ";" ) ";)
[ expression ] ";" [ expression ] ";" ")" statement

时间: 2024-10-22 09:13:06

巴科斯范式的相关文章

可爱的Python: 使用Spark模块解析

Spark 是一种用 Python 编写的强大的.通用的解析器/编译器框架.在某些方面,Spark 所提供的比 SimpleParse 或其它 Python 解析器提供的都要多.然而,因为它完全是用 Python 编写的,所以速度也会比较慢.David 在本文中讨论了 Spark 模块,给出了一些代码样本,解释了它的用途,并对其应用领域提供了一些建议. 继"可爱的 Python"系列中专门讲述 SimpleParse 的 前一篇文章之后,我将在本文中继续介绍一些解析的基本概念,并对 S

可爱的Python: 使用SimpleParse模块进行解析

与大多数程序员一样,我经常需要标识存在于文本文档中的部件和结构,这些文档包括:日志文件.配置文件.分隔的数据以及格式更自由的(但还是半结构化的)报表格式.所有这些文档都拥有它们自己的"小语言",用于规定什么能够出现在文档内. 我编写处理这些非正式解析任务的程序的方法总是有点象大杂烩,其中包括定制状态机.正则表达式以及上下文驱动的字符串测试.这些程序中的模式大概总是这样:"读一些文本,弄清是否可以用它来做些什么,然后可能再多读一些文本,一直尝试下去." 各种形式的解析

实现一个简单的编译器

简单的说 编译器 就是语言翻译器,它一般将高级语言翻译成更低级的语言,如 GCC 可将 C/C++ 语言翻译成可执行机器语言,Java 编译器可以将 Java 源代码翻译成 Java 虚拟机可以执行的字节码. 编译器如此神奇,那么它到底是如何工作的呢?本文将简单介绍编译器的原理,并实现一个简单的编译器,使它能编译我们自定义语法格式的源代码.(文中使用的源码都已上传至 GitHub 以方便查看). 自定义语法 为了简洁易懂,我们的编译器将只支持以下简单功能: 数据类型只支持整型,这样不需要数据类型

深入理解CSS属性值语法

万维网联盟(W3C) 使用了一套特别的语法来定义 CSS 的属性值,能让所有的 CSS 属性都用.如果你曾看过 CSS 规范,你可能已经见过这套语法了.就像 border-image-slice 的语法 ,让我们看看: <'border-image-slice'> = [<number> | <percentage>]{1,4} && fill? 如果你不知道这些符号以及它们如何工作的话,这套语法可能非常难理解.然而,这值得花时间来学.如果你理解 W3C

程序员的十层楼

自西方文艺复兴以来,中国在自然科学方面落后西方很多,软件领域也不例外.当然现在中国的许多程序员们对此可能有许多不同的意见,有些人认为中国的程序员水平远落后于西方,有些则认为中国的程序员个人能力并不比西方的程序员差,只是整个软件产业落后而已.     那么,到底中国的程序员水平比西方程序员水平差,还是中国有许多优秀的程序员达到或超过了西方程序员同等水平呢?要解决这个问题,必须先知道程序员有多少种技术层级,每个层级需要什么样的技术水平,然后再比较中国和西方在各个技术层级的人数,就可以知道到底有没有差

《编译与反编译技术实战》——1.3 语法分析生成器YACC

1.3 语法分析生成器YACC 语法分析的任务是分析句子是否符合语法规范.YACC(Yet Another Compiler Compiler)是一个经典的语法分析生成器.YACC最初是由AT&T公司的Steven C. Johnson为UNIX操作系统开发的,后来一些兼容的程序如Berkeley YACC.GNU Bison.MKS YACC和Abraxas YACC陆续出现,它们都是在此基础上做了少许改进或者增强,但是基本概念是相同的.现在YACC也已普遍移植到Windows及其他平台上.

《编译与反编译技术实战 》一1.3 语法分析生成器YACC

1.3 语法分析生成器YACC 语法分析的任务是分析句子是否符合语法规范.YACC(Yet Another Compiler Compiler)是一个经典的语法分析生成器.YACC最初是由AT&T公司的Steven C. Johnson为UNIX操作系统开发的,后来一些兼容的程序如Berkeley YACC.GNU Bison.MKS YACC和Abraxas YACC陆续出现,它们都是在此基础上做了少许改进或者增强,但是基本概念是相同的.现在YACC也已普遍移植到Windows及其他平台上.

《编译与反编译技术实战》——1.3节语法分析生成器YACC

1.3 语法分析生成器YACC 语法分析的任务是分析句子是否符合语法规范.YACC(Yet Another Compiler Compiler)是一个经典的语法分析生成器.YACC最初是由AT&T公司的Steven C. Johnson为UNIX操作系统开发的,后来一些兼容的程序如Berkeley YACC.GNU Bison.MKS YACC和Abraxas YACC陆续出现,它们都是在此基础上做了少许改进或者增强,但是基本概念是相同的.现在YACC也已普遍移植到Windows及其他平台上.

用Python创建声明性迷你语言的教程_python

大多数程序员考虑编程时,他们都要设想用于编写应用程序的 命令式样式和技术.最受欢迎的通用编程语言(包括 Python 和其它面向对象的语言)在样式上绝大多数都是命令式的.另一方面,也有许多编程语言是 声明性样式,包括函数语言和逻辑语言,还包括通用语言和专用语言. 让我们列出几个属于各个种类的语言.许多读者已经使用过这些工具中的许多工具,但不见得考虑过它们之间的种类差别.Python.C.C++.Java.Perl.Ruby.Smalltalk.Fortran.Basic 和 xBase 都是简单