Когда следует использовать термины "разделитель","терминатор" и "разделитель"
Какова семантика использования слов "разделитель", "терминатор" и "разделитель"? Например, я считаю, что после каждого токена должен появляться терминатор и разделитель между каждым токеном. Является ли разделитель тем же, что и любой из них, или это просто формы разделителя?
У SO есть все три тега, но они не являются синонимами друг друга. Это потому, что все они действительно разные?
10 ответов
Технически разделитель идет между вещами, возможно, чтобы сообщить вам, где заканчивается одно поле и начинается другое, например, в файле с разделителями-запятыми (CSV).
Терминатор идет в конце чего-либо, заканчивая строку / ввод / что угодно.
Разделитель может быть разделителем или чем-то еще, что разделяет вещи. Рассмотрим пробелы между словами в английском языке, например.
Вы можете утверждать, что символ новой строки является разделителем строк, разделителем строк или чем-то, что разделяет две строки. По этой причине в спецификации Unicode есть несколько разных символов типа новой строки.
Разделитель обозначает границы чего-либо, где оно начинается и где оно заканчивается. Например:
"this is a string"
имеет два разделителя, оба из которых оказываются двойными кавычками. Разделители указывают, что является частью вещи, а что нет.
Разделитель различает две вещи в последовательности:
one, two
1\t2
code(); // comment
Роль разделителя состоит в том, чтобы разграничить две различные сущности, чтобы их можно было различить. (Обратите внимание, что я говорю "два", потому что в информатике мы обычно говорим об обработке линейной последовательности символов).
Терминатор указывает на конец последовательности. В CSV вы можете думать о переводе строки как о завершении записи на одной строке или об отделении одной записи от следующей.
Границы токена часто обозначаются изменением синтаксических классов:
foo()
скорее всего будет помечен как word(foo)
, lparen
, rparen
- нет никаких явных разделителей между токенами, но токенизатор распознал бы изменение в грамматических классах между символами альфа и пунктуации.
Категории не полностью различны. Например:
[red, green, blue]
может (в зависимости от вашего синтаксиса) быть списком из трех элементов; скобки ограничивают список, а правая скобка завершает список и отмечает конец blue
маркер.
Что касается использования этими терминами SO-терминов в качестве тегов, то это всего лишь теги, обозначающие тему вопроса. Для тегов не существует единой контролируемой лексики; любой, у кого достаточно кармы, может добавить новый тег. Существует достаточно различий в терминологии, так что вы никогда не сможете иметь единый контролируемый словарь тегов во всех темах, которые охватывает SO.
Разделитель - это один или два маркера, которые показывают начало и конец чего-либо. Они нужны, потому что мы не знаем, как долго это "что-то" будет. У нас может быть: 1. один разделитель или 2. пара разделителей
[a, b, c, d, e]
каждая запятая (,
) является одним разделителем. Левая и правая скобки, ([
,]
) являются разделителями пар."hello"
, два символа кавычки ("
) являются парными разделителями
Разделитель - это синоним "разделителя", но по моему опыту он обычно относится к разделителям полей. Разделитель полей действует как разделитель между одним полем и последующим за ним, поэтому его можно "разделить".
<file1>␜<file2>␜<file3>
, символ разделителя файлов (␜
), несмотря на то, что имя, имеющее "разделитель", является разделителем и разделителем
Терминатор обозначает конец группы вещей, опять же необходимый, потому что мы не знаем, как долго это будет продолжаться.
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
и т. д.) - и будет неясно, может ли терминатор в этом контексте также быть разделителем в более сложной родительской структуре.
Этот ответ находится в контексте CSV, потому что все предоставленные ответы сосредоточены на английском языке.
Разделители - это все элементы, упомянутые в данной спецификации CSV, которые описывают границы содержимого, разделители - это общее имя для разделителей полей, терминаторы - это общее имя для разделителей записей.
Разделитель является частью спецификации формата CSV, он определяет границы и не должен быть печатным символом.
Терминаторы, разделители и квалификаторы полей являются разделителями, но необязательно указывать формат CSV, например, разделитель 50 столбцов означает, что каждые 50 столбцов представляют собой одно значение - символы от 0 до 49 в каждой строке (обычно заполненные пробелами) являются значением поля 0 и символы от 50-99 являются значением поля field1 и т. д.
Терминатор - это разделитель, который обычно представлен либо переводом строки (LF
), Возврат каретки (CR
) или комбинация (например, CRLF
) и отмечает конец одной записи CSV.
Разделитель - это разделитель, который представлен печатным символом (например, точкой с запятой) и отмечает разделение между полями CSV, он был введен для хранения значений динамической длины. Спецификации формата CSV без разделителя обычно имеют постоянную длину поля.
Спецификатор поля - это разделитель, который обычно используется в парах вместо escape-последовательности, это печатный символ, который не допускается в значении поля (если в спецификации формата CSV не указана escape-последовательность) и отмечает начало и конец поля, он был введен для хранения значений, содержащих разделители.
Escape-последовательность - это символ (или набор символов), который помечает все, что следует за escape-последовательностью, как несущественное и, следовательно, как часть значения поля (например, обратная косая черта может указывать непосредственно следующий разделитель как часть значения). Эта последовательность может экранировать один или несколько символов.
Разделитель
Есть пара чувств для delimiter
:
Как пространство используется в предложениях (граница).
Разделитель - это как граница, он существует между странами.
В этом смысле должно быть две страны, чтобы иметь границу.
Между словами обычно существует пробел, но не в конце. Пробел ограничивает слова, но неterminate
предложения (сборник слов). Приговор:Это короткое предложение.
Имеет четыре пробела, они действуют как разделители слов. Там нет конечного пространства.
На самом деле, есть два дополнительных разделителя, которые обычно не называются: начало и конец предложения. Словно^
а также$
используется в регулярных выражениях для обозначения начала и конца строки текста.
И на человеческом языке есть знаки препинания (точка, запятая, точка с запятой, двоеточие и т. Д.), Которые также служат разделителями слов (дополнительно к пробелам)Как используется в кавычках (граница).
Предложение вроде:"Это короткое предложение".
Является
delimited
(начало и конец) двойными кавычками (“”
). В этом смысле это похоже на "сбалансированные разделители" ( Balanced Brackets in Wikipedia).
Некоторые могут поспорить frontier
и границы по сути одинаковы, и при некоторых условиях они на самом деле являются правильными.
Разделитель
Точно так же, как первый смысл (выше) разделителя (границы).
Итак, separator
является синонимом разделителя во многих использованиях компьютера.
терминатор
Разграничить конец отдельного "поля".
Как и новые строки в текстовом файле Unix. Каждая строка заканчивается NewLine (\n
).
В правильном текстовом файле Unix все строки заканчиваются (даже последняя). Подобные абзацы заканчиваются новой строкой на человеческом языке.
Или, точнее, как NUL (\0
) является терминатором строки C:
Строка определяется как непрерывная последовательность единиц кода, оканчивающаяся первой единицей нулевого кода (часто называемой единицей кода NUL).
Таким образом, символ-терминатор также является разделителем, но также должен появляться в конце.
Теги
Stackru имеет теги только для разделителей и разделителей
разделитель Разделитель - это последовательность из одного или нескольких символов, используемая для указания границы между отдельными независимыми областями в виде простого текста или других потоков данных.
разделитель Символ, который разделяет части строки.
Терминатор относится только к эмулятору терминала оболочки:
терминатор Терминатор - эмулятор терминала GPL.
И, да, разделитель и разделитель во много раз эквивалентны
за исключением скобок, фигурных скобок, квадратных скобок и аналогичных сбалансированных разделителей.
Интересный вопрос и ответы. Подводя итог, 1) разделитель отмечает "пределы" чего-либо, то есть начала и / или конца; 2) терминатор - это просто специальный термин для "конечного разделителя"; 3) разделитель влечет за собой наличие элементов по обе стороны от него (в отличие от разделителя).
Лучший пример, который я могу придумать для начального разделителя, - это маркеры начальных комментариев в языках программирования ("#", "//" и т. Д.).
Лучший пример, который я могу придумать для терминатора (конечный разделитель), это символ перевода строки в Unix. Это неправильно - он всегда завершает (возможно, пустую) строку, но не всегда начинает новую строку, то есть когда это последний символ в файле. Возможно, более распространенный пример - простой период для предложений.
Лучший пример для разделителя - простая запятая. Обратите внимание, что запятая никогда не появляется на английском языке без текста как до, так и после него.
Интересно отметить, что ни один из них не обязательно ограничен односимвольным. На самом деле awk (или, может быть, только gawk?) В Unix позволяет FS (разделителю полей) быть любым регулярным выражением.
Кроме того, хотя "любое ненулевое количество пробелов" считается "разделителем слов", например, в команде wc, в регулярных выражениях также есть спецификаторы "границы слова" нулевой ширины (например, \b). Интересно подумать, можно ли считать такие элементы / границы нулевой ширины "разделителями". Я склонен думать нет (слишком много натяжения).
Добавляя к ответу здесь уже, я использую термин notator .
- Аннотация — это надмножество обозначений .
- Нотатор — это супермножество разделителей .
- Разделитель — это надмножество терминатора и разделителя .
Аннотация — это все обозначения и разметка, используемые в конкретном документе. Например, документ «Список TODO» должен представлять собой список строк, разделенных строками.
Нотация — это разметка, используемая для обозначения конкретного значения. Например, «строка в кавычках» — это нотация.
Разделитель — это символ или набор символов, используемый для обозначения нотации . Например, символьная кавычка является разделителем строк.
Терминатор — это конечный разделитель, а префикс — начальный разделитель. Для документа «Список TODO» цитата может использоваться как префикс и завершающий разделитель.
Разделитель — это разделитель , который разделяет две вещи. Например, «новая строка» — это разделитель для каждого элемента «Список TODO». В этом примере «новая строка» также является терминатором; новая строка может использоваться для завершения каждой строки. Разделитель также является терминатором, но это не всегда так.
Разделители также могут быть «позиционными». Примером с позиционными разделителями является плоский файл мэйнфрейма с разделителями столбцов.
Терминаторы являются разделителями, когда вы начинаете с пустого. А; В; С; на самом деле A;B;C; пусто.
Как и в случае с английским языком, существует технически правильный ответ и обычно используемый ответ, и, вероятно, уместно выделить в программировании использование искомых определений терминов.
В отрасли давно используется фраза "файл с разделителями-запятыми" для обозначения:
FirstRowFirstValue, FirstRowSecondValue, FirstRowThirdValue SecondRowFirstValue, SecondRowSecondValue, SecondRowThirdValue
ТЕХНИЧЕСКИ, это список, РАЗДЕЛЕННЫЙ запятыми.
ТЕХНИЧЕСКИ, это список, разделенный запятыми.
, FirstRowFirstValue, FirstRowSecondValue, FirstRowThirdValue`` SecondRowFirstValue, SecondRowSecondValue, SecondRowThirdValue,
или это:
, FirstRowFirstValue,, FirstRowSecondValue,, FirstRowThirdValue`` SecondRowFirstValue,, SecondRowSecondValue,, SecondRowThirdValue,
и никто этого не делает. Когда-либо.
И отраслевой стандарт - использовать "TEXT QUALIFIER" для ТЕХНИЧЕСКОГО определения "DELIMITER", где (") - это" TEXT QUALIFIER ", а (,) называется" DELIMITER ".
FirstRowFirstValue, "Второе значение первой строки", FirstRowThirdValue SecondRowFirstValue, SecondRowSecondValue, SecondRowThirdValue
"слово 1", "слово 2" \NULL
- Слова ограничены кавычками,
- через запятую,
- и все это заканчивается \NULL.