Когда следует использовать термины «разделитель», «терминатор» и «разделитель» - PullRequest
22 голосов
/ 02 февраля 2012

Какова семантика использования слов «разделитель», «терминатор» и «разделитель»? Например, я считаю, что после каждого токена будет появляться терминатор и разделитель между каждым токеном. Является ли разделитель тем же, что и любой из них, или это просто формы разделителя?

У SO есть все три тега, но они не являются синонимами друг друга. Это потому, что все они действительно разные?

Ответы [ 8 ]

22 голосов
/ 03 февраля 2012

Разделитель обозначает границы чего-либо, где оно начинается и где оно заканчивается.Например:

"this is a string"

имеет два разделителя, оба из которых оказываются двойными кавычками.Разделители указывают, что является частью вещи, а что нет.

Разделитель различает две вещи в последовательности:

one, two
1\t2
code();  // comment

Роль разделителя состоит в том, чтобы разграничить две различные сущности так,что их можно различить.(Обратите внимание, что я говорю «два», потому что в информатике мы обычно говорим об обработке линейной последовательности символов).

Терминатор указывает конец последовательности.В CSV вы можете думать о переводе строки как о прекращении записи на одну строку или об отделении одной записи от следующей.

Границы токена часто обозначаются изменением синтаксических классов:

foo()

, вероятно, будет маркироваться как word(foo), lparen, rparen - между токенами нет явных разделителей, но токенизатор распознает изменение в грамматических классах между символами альфа и пунктуации.

Категории не полностью различны.Например:

[red, green, blue]

может (в зависимости от вашего синтаксиса) быть списком из трех элементов;скобки ограничивают список, а правая скобка завершает список и отмечает конец токена blue.

Что касается использования этими терминами SO в качестве тегов, то это просто теги, указывающие натема вопроса.Для тегов не существует единой контролируемой лексики;любой, у кого достаточно кармы, может добавить новый тег.Существует достаточно различий в терминологии, так что вы никогда не сможете иметь единый контролируемый словарь тегов во всех темах, которые освещает SO.

13 голосов
/ 02 февраля 2012

Технически разделитель идет между вещами, возможно, для того, чтобы сказать вам, где заканчивается одно поле, а где начинается другое, например, в файле с разделителями-запятыми (CSV).чего-либо, заканчивая строку / ввод / что угодно.

Разделитель может быть разделителем или чем-то еще, что разделяет вещи.Рассмотрим, например, пробелы между словами в английском языке.

Можно утверждать, что символ новой строки - это разделитель строк, разделитель строк или нечто, разделяющее две строки.По этой причине в спецификации Unicode есть несколько различных символов типа новой строки.

3 голосов
/ 08 февраля 2017

A delimiter - это один или два маркера, которые показывают начало и конец чего-либо. Они нужны, потому что мы не знаем, как долго это «что-то» будет. Мы можем иметь либо: 1. один разделитель , либо 2. пару разделителей пар

  • [a, b, c, d, e] каждая запятая (,) представляет собой один разделитель . Левые и правые скобки ([, ]): разделители пар .
  • "hello", два символа кавычек ("): разделители пар

A разделитель является синонимом «разделителя», но, по моему опыту, он обычно относится к разделителям полей . Разделитель полей действует как разделитель между одним полем и последующим за ним, поэтому его можно «разделить».

  • <file1>␜<file2>␜<file3>, символ разделителя файлов (), несмотря на то, что имя, имеющее «разделитель», явно является разделителем и разделителем

A терминатор отмечает конец группы вещей, снова необходимых, потому что мы не знаем, как долго это будет.

  • abdefa\0, здесь нулевой символ \0 - это терминатор , который сообщает нам, что строка завершилась.
  • foo\n, здесь символ новой строки \n - это терминатор , который сообщает нам, что строка закончилась.

Термины «разделитель» и «разделитель» берут свое начало из классической идеи хранения, концептуально состоящей из файлов, записей и полей (файл имеет много записей, запись имеет много полей). В этом контексте один разделитель и разделитель пар можно назвать разделителями записей и разделителями полей . Из-за исторического значения таксономии файлов-записей-полей эти термины получили более широкое распространение (см. Страницу Википедии для Разделитель ).

  • Ниже приведены два файла, каждый с тремя записями, каждая из которых имеет четыре поля:

    martin,rodgers,33,28000\n
    timothy,byrd,22,25000\n
    marion,summers,35,37000\n
    ===
    lucille,rowe,28,33000\n
    whitney,turner,24,19000\n
    fernando,simpson,35,40900\n
    

    Здесь , и \n, как мы знаем, являются одиночными разделителями, но их также можно назвать разделителями записей и разделителями полей соответственно.


Для сложных вложенных структур терминатор также может быть разделителем / разделителем (они не являются взаимоисключающими определениями). Из предыдущего примера маркер === внутри файла можно считать терминатором ( это конец файла ). Но когда мы смотрим на множество файлов, === действует как разделитель / разделитель.

  • Рассмотрим строки в файле UNIX

    This is line 1\n
    This is line 2\n
    This is line 3\n
    

    Символы новой строки являются терминаторами (они говорят нам, где заканчивается строка) и являются разделителями (они говорят нам, где каждая строка начинается и заканчивается). От Википедия :

    Два способа просмотра новых строк, оба из которых являются самосогласованными, заключаются в том, что новые строки либо разделяют строки, либо они заканчивают строки.

На самом деле вам нужно будет говорить «терминатор» только тогда, когда вы говорите об одном отдельном предмете (только одна строка 1234\0, только одна строка abcd\n и т. Д.) - и это будет неясно может ли терминатор в этом контексте также быть разделителем в более сложной родительской структуре.

0 голосов
/ 17 ноября 2018

Разделитель

Есть пара чувств для delimiter:

  • Как пространство, используемое в предложениях (граница).
    Разделитель похож на границу, он существует между странами .
    В этом смысле должна быть две страны, чтобы иметь границу.
    Между словами обычно существует пробел, но не в конце. Пробел ограничивает слова, но не terminate предложений (набор слов). Предложение:

    Это короткое предложение.

    Имеет четыре пробела, они действуют как разделители слов. Конечного пробела нет.
    На самом деле, есть два дополнительных разделителя, которые обычно не называются: начало и конец предложения. Как ^ и $, используемые в регулярных выражениях для обозначения начала и конца строки текста.
    И, на человеческом языке, есть знаки препинания (точка, запятая, точка с запятой, двоеточие и т. Д.), Которые также служат разделителями слов (дополнительно к пробелам)

  • Как используется в кавычках (граница).
    Предложение типа:

    «Это короткое предложение».

    равен delimited (начало и конец) двойными кавычками (“”). В этом смысле это похоже на «сбалансированные разделители» ( Сбалансированные скобки в Википедии ).

Некоторые могут утверждать, что frontier и границы по сути одинаковы, и при некоторых условиях они действительно верны.

Сепаратор

Точно так же, как первый смысл (выше) разделителя (границы).

Итак, separator - это синоним разделителя во многих компьютерных применениях.

Terminator

Разграничить конец отдельного «поля».
Как и новые строки в текстовом файле Unix. Каждая строка заканчивается NewLine (\n).
В правильном текстовом файле Unix все строки заканчиваются (даже последняя). Подобные абзацы заканчиваются символом новой строки на человеческом языке.

Или , более строго , поскольку NUL (\0) является терминатором строки C :

Строка определяется как непрерывная последовательность единиц кода , оканчивающаяся первой единицей нулевого кода (часто называемой единицей кода NUL).

Итак, символ-терминатор также является разделителем, но должен также появляться в конце.

Метки

Stackoverflow имеет теги только для разделителей и разделителей

Разделитель - это последовательность из одного или нескольких символов, используемая для указания границы между отдельными независимыми областями в виде простого текста или других потоков данных.
Символ, который разделяет части строки.

Тег терминатора применяется только к эмулятору терминала оболочки:

Terminator - эмулятор терминала GPL.

И, да, разделитель и разделитель во много раз эквивалентны
кроме для скобок, скобок, квадратных скобок и аналогичных сбалансированных разделителей .

0 голосов
/ 08 февраля 2017

"слово 1", "слово 2" \ NULL

  1. Слова разделены кавычками,
  2. , разделенными запятой,
  3. и целымвещь заканчивается \ NULL.
0 голосов
/ 16 марта 2016

Этот ответ относится к контексту CSV, поскольку все предоставленные ответы сосредоточены на английском языке.

Разделители - это все элементы, упомянутые в данной спецификации CSV, которые описывают границы содержимого, разделители - это общее имя для разделителей полей, терминаторы - это общее имя для разделителей записей.


Разделитель является частью спецификации формата CSV, он определяет границы и не должен быть печатным символом.

Терминаторы, разделители и квалификаторы полей являются разделителями, но необязательно указывать формат CSV, например, Разделитель 50 столбцов означает, что каждые 50 столбцов представляют собой одно значение - символы от 0 до 49 в каждой строке (обычно заполненные пробелами) являются значением поля 0, а символы от 50 до 99 - значением поля 1 и т. Д.

Терминатор - это разделитель, который обычно представлен либо переводом строки (LF), возвратом каретки (CR) или комбинацией (например, CRLF) и отмечает конец одной записи CSV.

Разделитель - это разделитель, который представлен печатным символом (например, точкой с запятой) и отмечает разделение между полями CSV, он был введен для хранения значений динамической длины. Спецификации формата CSV без разделителя обычно имеют постоянную длину поля.

Спецификатор поля - это разделитель, обычно используемый в парах вместо escape-последовательности, это печатный символ, который не допускается в значении поля (если только в спецификации формата CSV не указана escape-последовательность) и отмечает начало и конец поле, оно было введено для хранения значений, содержащих разделители.

Escape-последовательность - это символ (или набор символов), который помечает все, что следует за escape-последовательностью, как несущественное и, следовательно, как часть значения поля (например, обратная косая черта может указывать непосредственно следующий разделитель как часть значение). Эта последовательность может содержать один или несколько символов.

0 голосов
/ 10 марта 2016

Терминаторы являются разделителями, когда вы начинаете с пустого.А; В; С;на самом деле A; B; C; пусто.

0 голосов
/ 26 сентября 2015

Интересный вопрос и ответы.Подводя итог, 1) разделитель отмечает «пределы» чего-либо, то есть начало и / или конец;2) терминатор - это просто специальный термин для «конечного разделителя»;3) разделитель влечет за собой наличие элементов по обе стороны от него (в отличие от разделителя).

Лучший пример, который я могу придумать для начального разделителя - это маркеры начальных комментариев в языках программирования ("#", "//"и т. д.).

Наилучшим примером, который я могу придумать для терминатора (конечного разделителя), является символ перевода строки в Unix.Это неправильно - он всегда завершает (возможно, пустую) строку, но не всегда начинает новую строку, то есть когда это последний символ в файле.Возможно, лучшим распространенным примером является простой период для предложений.

Лучший пример, который я могу придумать для разделителя, - это простая запятая.Обратите внимание, что запятая никогда не появляется на английском языке без текста как до, так и после нее.

Интересно отметить, что ни одна из них не обязательно ограничена односимвольными.На самом деле awk (или, может быть, только gawk?) В Unix позволяет FS (разделителю полей) быть любым регулярным выражением.

Также, хотя «любое ненулевое количество пробелов» считается «разделителем слов», например,В команде wc есть также спецификаторы нулевой ширины "границы слова" в регулярных выражениях (например, \ b).Интересно подумать о том, можно ли считать такие элементы / границы нулевой ширины «разделителями».Я склонен думать нет (слишком много натяжения).

...