Когда использовать термины "разделитель", "терминатор" и "разделитель",

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

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

Ответы

Ответ 1

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

Терминатор идет в конце чего-то, заканчивая строку/ввод/все.

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

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

Ответ 2

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

"this is a string"

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

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

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

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

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

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

foo()

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

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

[red, green, blue]

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

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

Ответ 3

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

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

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

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

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

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

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

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

    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
    

    Новые строки являются как терминаторами (они говорят нам, где заканчивается строка), и являются разделителями (они сообщают нам, где каждая строка начинается и заканчивается). Из Wikipedia:

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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


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

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

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

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

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

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

Ответ 7

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

  • Слова ограничены кавычками,
  • разделенных запятой,
  • и все это заканчивается \NULL.