什么是学说的BNF?

时间:2010-02-25 17:03:34

标签: doctrine bnf

2 个答案:

答案 0 :(得分:3)

我认为它不被任何人类用作参考,实际上;但如果有人想使用一些了解BNF的自动工具,它可能会很有用;例如,某种代码生成器。

BNF的优势在于它是描述语言的正式方式 - 当你是一个程序时,它比英语更容易理解。


供参考:



评论后编辑:以下是关于DQL / Object内容的快速示例:

让我们考虑这部分代码,它使用面向对象的API来编写查询,执行它,并获得结果(作为数组加水 - 只打印出数据,这样,在调试时)

$result = Doctrine_Query::create()
    ->select('p.id, p.title, u.login')
            ->from('Ab_Model_Post p')
            ->innerJoin('p.User u')
            ->where('p.codeStatus = ?')
            ->orderBy('p.date desc')
            ->limit(2)
            ->execute(array('OK'), Doctrine::HYDRATE_ARRAY);
var_dump($result);

以下是您将获得的输出类型:

array
  0 => 
    array
      'id' => string '7' (length=1)
      'title' => string 'Septième post' (length=14)
      'User' => 
        array
          'id' => string '1' (length=1)
          'login' => string 'user1' (length=5)
  1 => 
    array
      'id' => string '6' (length=1)
      'title' => string 'Sixième post (draft=7)' (length=23)
      'User' => 
        array
          'id' => string '1' (length=1)
          'login' => string 'user1' (length=5)

当然,这是考虑架构和模型类是正常的 - 并且对于法语中的示例感到抱歉,我使用了我前段时间设置的架构/模型/数据库来演示Doctrine,其中是法语。

基本上,数据库用于博客应用程序,在这里,我们:

  • 从帖子和发布帖子的用户那里获取一些数据
  • 有效帖子
  • 最新帖子
  • 只有两个帖子


现在,这是一个等价物,使用“DQL”的意思,如“伪SQL语言”:

$result = Doctrine_Query::create()
    ->query(<<<DQL
select p.id, p.title, u.login
from Ab_Model_Post as p, 
    p.User u
where p.codeStatus = ?
order by p.date desc
limit 2
DQL
    , array('OK'), Doctrine::HYDRATE_ARRAY);
var_dump($result);

这里没有面向对象的API (好吧,编写查询,我的意思是):我只写了我正在考虑的伪SQL - 这就是BNF所描述的,到目前为止我可以告诉你。

当然,var_dump的输出与我之前的输出完全相同。


我希望这会让事情变得更清楚: - )

答案 1 :(得分:0)

它是Backus-Naur形式,一种描述无上下文语法的方法。请参阅this wikipedia article