Существует ли руководство / соглашение по разметке, используемой в официальной документации lua? - PullRequest
1 голос
/ 01 ноября 2019

Мне непросто читать официальную документацию, когда она связана с кодированием. Я вообще не понимаю это, если это не соединено с примером. Я ищу разъяснения о том, какие соглашения применяются при чтении документов, если таковые имеются. Возьмите приведенный ниже пример из руководства lua (https://www.lua.org/manual/5.1/manual.html#2.1):

stat ::= if exp then block {elseif exp then block} [else block] end

Первое слово, Stat, определяется как оператор, и «этот набор включает в себя присваивания, управляющие структуры, вызовы функций иобъявления переменных. "

:: = Не определено в документах, к счастью, его можно гуглить.

Exp связан и объяснен.

Блок также имеет раздел.

Но тогда они делают {} и []. Они буквально заявили: «Квадратные скобки используются для индексации таблицы» всего несколькими строками выше. И эти волнистые скобки предназначены для написания таблицы. из этого следует, что {} и [] используются для обозначения отдельных разделов как разметки, чтобы облегчить просмотр определенных компонентов? Или что {elseif exp then block} является таблицей с этими значениями внутри себя и [блок else] - это индексирование таблицы по значению ключа? Если бы я писал документ там, где это действительно было, разве я не написал бы это так?

Тогда я вижу

var ::= prefixexp `[´ exp `]´`

'' определяет строку, но я должен сделать предположение, что '[' ']' используется как способ подчеркнуть тот факт, что, поскольку они говорили о том, что квадратные скобки делают в предыдущем разделе, они просто выделяют свою позицию, и это не должно быть включенов коде. Я только знаю, чтобы сделать это предположение, потому что я знаю, что это не работает, когда вы помещаете их туда.

Но потом я вижу это:

chunk ::= {stat [`;´]}

Точно так же они говорят оразмещение точки с запятой перед перечислением этого кода, но также была полностью объяснена и обсуждалась вся строка кода. Почему я предполагаю, что он написан без скобок, если он написан с круглыми скобками? И я вижу, что они снова используют {} и [], и я понятия не имею, на что они ссылаются, потому что не указано явно, что мы говорим о таблице ... просто используется сам код, чтобы объяснить, говорит ли он отаблица или нет с {}, но у нас есть первый набор кода, где {} используется, и речь не идет о таблице.

Какое соглашение используется? Что они на самом деле пытаются сделать / показать, используя {} и [] в первой строке кода?

1 Ответ

2 голосов
/ 01 ноября 2019

Как указано в начале документации Lua и в разделе по грамматике Lua , Lua представляет свою грамматику в расширенном формате BNF .

У EBNF есть собственная пунктуация со своим собственным значением, например ::=, как вы обнаружили. Но как грамматика, должно быть различие между значением пунктуации в EBNF и «эта пунктуация появляется на языке, определяемом грамматикой». Поэтому всегда подразумевается первое значение;последнее значение может быть достигнуто только путем цитирования пунктуации.

Итак, это:

var ::= prefixexp `[´ exp `]´`

Означает prefixexp, за которым следует открывающая скобка, за которой следует exp сопровождается закрывающей скобкой.

Для сравнения:

funcname ::= Name {`.´ Name} [`:´ Name]

означает Name, за которым следует ноль или более подпоследовательностей ., за которыми следует Name, затемнеобязательной подпоследовательностью :, за которой следует Name. Потому что это то, что {} и [] означают для EBNF.

...