首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • [有意义的蛋帖系列]巴科斯范式及其扩展 [已结贴,结贴人:Jeffrey84]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 00:00:38 楼主
        什么是巴科斯范式?
     
      巴科斯范式(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 } """


       
        扩展的巴科斯范式 Augmented BNF 
     
      RFC2234 定义了扩展的巴科斯范式(ABNF)。近年来在Internet的定义中ABNF被广泛使用。ABNF做了更多的改进,比如说,在ABNF中,尖括号不再需要。 


    // 来源:http://blog.edu.cn/user1/18646/archives/2005/139037.shtml
    0  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbger
    • 等级:
    发表于:2008-05-17 00:01:461楼 得分:0
    虽然有意义,我还是图
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • es021
    • 等级:
    发表于:2008-05-17 00:02:082楼 得分:0
      蛋帖
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • KingNE
    • 等级:
    发表于:2008-05-17 00:02:123楼 得分:0

    靠没分就这样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wolfgang_l
    • 等级:
    发表于:2008-05-17 00:06:284楼 得分:0
    话说,大队长,这个确实十分有意义!
    不过………………
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 00:25:175楼 得分:0
    这个我留着自己看的,你们鄙视个毛啊.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ming4098
    • 等级:
    发表于:2008-05-17 00:29:306楼 得分:0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dbger
    • 等级:
    发表于:2008-05-17 00:38:347楼 得分:0
    引用 5 楼 Jeffrey84 的回复:
    这个我留着自己看的,你们鄙视个毛啊.


    鄙视马甲发蛋帖后删贴,HOHO被偶发现
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 00:44:278楼 得分:0
    引用 7 楼 dbger 的回复:
    引用 5 楼 Jeffrey84 的回复:
    这个我留着自己看的,你们鄙视个毛啊.


    鄙视马甲发蛋帖后删贴,HOHO被偶发现


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 05:26:119楼 得分:0
    markup
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 10:29:2810楼 得分:0
    引用 9 楼 ProjectDD 的回复:
    markup
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved