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

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

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

7 ответов


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

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

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

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


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

"this is a string"

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

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

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

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

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

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

foo()

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

категории не совсем различны. Например:

[red, green, blue]

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

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


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

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

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

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

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

  • abdefa, вот нулевой символ это Терминатор говорит нам, что строка закончилась.
  • 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, только одна строка abcd\n, etc.) -- и будет неясно, может ли Терминатор в этом контексте также быть разделителем в более сложной родительской структуре.


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

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

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

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

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

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


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


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

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


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

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

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

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

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

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


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

  1. слова разделены кавычками,
  2. разделены запятыми,
  3. и все это завершается \NULL.