Я не думаю, что оно используется в качестве эталона любым человеком, на самом деле;но это может быть полезно, если кто-то хочет использовать какой-то автоматический инструмент, который понимает 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, которая была вch.
По сути, БД предназначена для приложения для ведения блогов, и здесь мы:
- получаем некоторые данные из сообщений и пользователя, который их разместил
- для действительных сообщений
- наибольшее количество сообщений
- только два сообщения
Теперь вот эквивалент, используя то, что я имел в виду под "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
точно такой же, как тот, который я получил раньше.
Надеюсь, это немного прояснит ситуацию: -)