什么是巴科斯范式?
巴科斯范式(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
这是Oracle packages的BNF定义:
package_body ::= "package" package_name "is"
package_obj_body { package_obj_body }
[ "begin" seq_of_statements ]
"end" [ package_name ] ";"
package_obj_body ::= variable_declaration
| subtype_declaration
| cursor_declaration
| cursor_body
| exception_declaration
| record_declaration
| plsql_table_declaration
| procedure_body
| function_body
procedure_body ::= "procedure" procedure_name
[ "(" argument { "," argument } ")" ]
"return" return_type
"is"
[ "declare" declare_spec ";" { declare_spec ";" } ]
"begin"
seq_of_statements
[ "exception" exception_handler { exception_handler } ]
"end" [ procedure_name ] ";"
statement ::= comment
| assignment_statement
| exit_statement
| goto_statement
| if_statement
| loop_statement
| null_statement
| raise_statement
| return_statement
| sql_statement
| plsql_block
这是用BNF来定义的BNF本身的例子:
syntax ::= { rule }
rule ::= identifier "::=" expression
expression ::= term { "|" term }
term ::= factor { factor }
factor ::= identifier |
quoted_symbol |
"(" expression ")" |
"[" expression "]" |
"{" expression "}"
identifier ::= letter { letter | digit }
quoted_symbol ::= """ { any_character } """
分享到:
相关推荐
常用的语法描述语言,某些情况下(例如:boost/sprit),可以用于编写语法解析器 例如:自己写一个c++函数识别程序,自动匹配函数名以及参数,用于写单元测试程序有可能会用到语法识别。
信息技术 语法元语言 扩展的BNF标准(EBNF) 巴科斯范式(BNF: Backus-Naur Form 的缩写)是由 John Backus 和 Peter Naur 首先引入的用来描述计算机语言语法的符号集。现在,几乎每一位新编程语言书籍的作者都使用...
巴科斯范式(BNF)查看器,可查看BNF范式生成的First集,Follow集,Select集和预测分析表,是学习编译原理的好工具。 附带标准c的bnf范式文件。
为了在供需网环境下实现企业知识的协同管理,提出了供需网企业知识本体...为表达供需网的协同知识语义,阐述了SDNKO概念框架的巴科斯范式和文档类型定义。最后,给出了供需网企业产品订单生成的知识协同管理实例。
首先以改进的扩展巴科斯范式(modified augmented Backus-Naur form,MABNF)来描述工控协议;然后根据范式语法模型,将报文样本解析为范式语法变异树,进而生成范式语法变异树的描述脚本;提出了基于MABNF变异树的...
语法规范的扩展巴科斯范式:ABNF (RFC2234——Augmented BNF for Syntax Specifications: ABNF) 本备忘录的状态 本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建 议以得到改进。...
首先以改进的扩展巴科斯范式(modified augmented Backus-Naur form,MABNF)来描述工控协议;然后根据范式语法模型,将报文样本解析为范式语法变异树,进而生成范式语法变异树的描述脚本;提出了基于MABNF变异树的...
掌握语言的形式化描述:语法描述图与巴科斯范式EBNF。以PL/0为例学习编译程序实现的基本步骤和相关技术,熟悉并理解编译程序的基本原理和概念。对于一段给定的程序,给出其形式化描述
针对传统基于渗透测试技术的漏洞检测方法中攻击向量复杂度低易被过滤、整体检测流程繁琐等问题,提出了一种基于扩展的巴科斯范式(EBNF)的攻击向量自动生成方法和XSS漏洞二次爬取策略。通过定义EBNF规则生成规则...
相一致 JavaCC还提供JJTree工具来帮助我们建立语法树 JJDoc工具为我们的源文件生成BNF范式 巴科斯 诺尔范式 文档 Html ">JavaCC JavaCompilerCompiler 是一个用JAVA开发的最受欢迎的语法分析生成器 这个分析生成器...
Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。 这些词汇模式(或者常规表达式)在一种特殊的句子结构中定义;Yacc 代表 Yet Another Compiler ...它用巴科斯范式(BNF, Backus Naur Form)来书写
1 *数字内容= * OCTET 键值=长度SP长度SP内容内容响应=错误| 字节数组错\u8bef='-'字节数组注意: DIGIT是ABNF的基本规则,取值范围是0〜9 OCTET是ABNF的基本规则,取值范围是0x00〜0xFF扩展巴科斯范式(ABNF,增强...
使用BNF(巴科斯-诺尔范式)或EBNF(扩展巴科斯-诺尔范式)来定义你的语言的语法。 为每个语法规则编写一个动作,这个动作通常包括构建语法分析树的一部分。 集成lex和yacc: lex生成的词法分析器会读取源代码,并...
在日常的编程中,我经常需要标识存在于文本文档中的部件和结构,这些文档包括:日志文件、配置文件、定界的数据以及格式更自由的(但还是半结构化的)报表...大多数正式的解析器都使用扩展巴科斯范式(Extended Backus
该模型通过作业中心维、属性维和成本中心维对在制品进行描述,并采用巴科斯—诺尔范式对其进行数学规范,给出了在制品成本追溯规则和算法流程。通过在钢铁企业的应用实例,验证了该模型的可行性,能够实现钢铁企业...
python实现的对C--语言的...可以采用EBNF(扩展巴科斯-诺尔范式)或类似的文法表示方法。 测试用例: 设计一系列测试用例,用于测试词法分析和语法分析器的正确性。 测试用例应该包括合法的C–代码和包含错误的代码。
温州医学院《儿科》期末考试试卷(含答案
大学生《儿科》期末考试复习知识点总结及题库.
大学生《内科学I》期末复习知识点总结
大学生《儿科学》期末复习知识点总结