Имя синтаксической нотации SQL? - PullRequest
1 голос
/ 19 июля 2009

Есть ли имя для синтаксиса, используемого для SQL?

Например.) Когда вы переходите на эту страницу на BOL (SQL Books OnLine),
он показывает синтаксис НАЧАТЬ ДИАЛОГОВЫЙ КОНВЕРСИЯ

BEGIN DIALOG [ CONVERSATION ] @dialog_handle
   FROM SERVICE initiator_service_name
   TO SERVICE 'target_service_name'
       [ , { 'service_broker_guid' | 'CURRENT DATABASE' } ] 
   [ ON CONTRACT contract_name ]
   [ WITH
   [  { RELATED_CONVERSATION = related_conversation_handle 
      | RELATED_CONVERSATION_GROUP = related_conversation_group_id } ] 
   [ [ , ] LIFETIME = dialog_lifetime ] 
   [ [ , ] ENCRYPTION = { ON | OFF }  ] ]
[ ; ]

Как называется / терминология синтаксиса, использованного выше?

Соглашения по синтаксису Transact-SQL (Transact-SQL) не упоминает название их "Соглашения по синтаксису".

Ответы [ 4 ]

1 голос
/ 08 августа 2009

Это неформальная, слегка сокращенная форма EBNF:

(http://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_Form)

используется в документах на компьютерном языке по крайней мере с конца 60-х годов.

0 голосов
/ 19 июля 2009

Я видел такое описание синтаксиса в течение длительного времени. Если вы интересуетесь древней историей, ознакомьтесь с языковым руководством TOPS-10 / TOPS-20 COBOL-74 (AA-5059B-TK).

0 голосов
/ 20 июля 2009

Я не знаю, имеет ли это обозначение конкретное имя, но это не BNF - форма Бэкуса-Наура и не EBNF (расширенный BNF, он же ISO / IEC 14977: 1996 ). Это слабо связано, но только слабо связано. В частности, BNF указывает, что нетерминальное имя определяется как некоторый список значений. Примером будет следующий оператор CREATE TABLE из стандарта SQL 2003:

<table definition> ::=
     CREATE [ <table scope> ] TABLE <table name> <table contents source>
     [ ON COMMIT <table commit action> ROWS ] 

LHS ('<table definition>') - это нетерминал, на который можно ссылаться в другом месте. Оператор «::=» является оператором «определен как». Термины в угловых скобках '<>' являются более нетерминальными (иногда такими же, как LHS, но не в этом примере), для которых есть определение где-то еще. Части в квадратных скобках '[ ... ]' являются необязательными (могут присутствовать - один раз - или могут быть вообще опущены). Стандарт SQL использует обозначение:

<non-terminal> { [ , <non-terminal> ] }...

для обозначения повторения.

Фрагмент в вопросе не является непосредственно BNF, потому что он не использует нотацию «LHS :: = RHS»; это эффективно предполагает, что LHS не должен быть назван. Из обозначений также не ясно (как показано - в исходном документе это может быть яснее), являются ли такие элементы, как 'CURRENT DATABASE' и 'target_server_name' терминалами или нетерминалами (скорее всего, текущая база данных является терминалом и именем целевого сервера). нет - но БНФ прояснит это).

0 голосов
/ 19 июля 2009

Я согласен с Ляо.

Это еще не все. Это используется не только для синтаксиса SQL, но и для описания / определения грамматик различных искусственных языков (в том числе и языков программирования, принадлежащих нам).

...