使用“分隔符”,“终结符”和“分隔符”这几个词后面的语义是什么?例如,我相信在每个令牌之后会出现一个终结符,并且每个令牌之间都有一个分隔符。分隔符是否与其中任何一个相同,或者它们只是分隔符的形式?
SO有三个标签,但它们不是彼此的同义词。这是因为它们真的完全不同吗?
答案 0 :(得分:21)
分隔符表示某些内容的限制,它开始的位置和结束的位置。例如:
"this is a string"
有两个分隔符,这两个分隔符恰好是双引号字符。分隔符表示事物的一部分,什么不是。
分隔符区分序列中的两件事:
one, two
1\t2
code(); // comment
分隔符的作用是划分两个不同的实体,以便区分它们。 (请注意,我说“两个”,因为在计算机科学中,我们通常都在谈论处理线性字符序列)。
终止符表示序列的结束。在CSV中,您可以将换行视为在一行上终止记录,或将一条记录与下一条记录分开。
令牌边界通常由语法类的变化表示:
foo()
可能会被标记为word(foo)
,lparen
,rparen
- 标记之间没有任何明确的分隔符,但是标记化程序会识别alpha和alpha之间语法类的更改标点符号。
这些类别并不完全不同。例如:
[red, green, blue]
可以(取决于您的语法)是三个项目的列表;括号分隔列表,右括号终止列表并标记blue
标记的结尾。
至于SO将这些术语用作标签,它们只是:用于指示问题主题的标签。标签没有统一的受控词汇表;任何有足够业力的人都可以添加新标签。存在足够的术语差异,在SO涵盖的所有主题中,您永远不会有单一的受控标签词汇。
答案 1 :(得分:12)
从技术上讲,分隔符介于两者之间,可能是为了告诉您一个字段的结束位置和另一个字段的开始位置,例如逗号分隔值(CSV)文件。
终结符出现在某个行尾,终止行/输入/无论如何。
分隔符可以是分隔符或任何其他分隔事物的分隔符。例如,考虑英语单词之间的空格。
你可能会认为换行符是行终止符,行的分隔符或分隔两行的东西。因此,Unicode规范中有一些不同的换行符。
答案 2 :(得分:2)
分隔符是一个或两个标记,用于显示某些内容的开头和结尾。他们是需要的,因为我们不知道'某事'将会持续多久。我们可以:1。单个分隔符,或2.一对对分隔符
[a, b, c, d, e]
每个逗号(,
)都是单个分隔符。左括号和右括号([
,]
)是 pair-delimiters 。"hello"
,两个引号符号("
)是 pair-delimiters 分隔符是“分隔符”的同义词,但根据我的经验,它通常是指字段分隔符。字段分隔符充当一个字段与其后面的字段之间的分隔符,这就是为什么可以将它们“分离”起来。
<file1>␜<file2>␜<file3>
,文件分隔符(␜
),尽管明确名称为“separator”,但它是分隔符和分隔符 终结者标志着一组事物的结束,再次需要,因为我们不知道它有多长。
abdefa\0
,此处空字符\0
是终结符,告诉我们字符串已结束。foo\n
,此处换行符\n
是一个终结符,告诉我们该行已经结束。术语,分隔符,分隔符源于存储的经典概念,在概念上,由文件,记录和字段组成,(文件有许多记录,记录有许多字段)。在此上下文中,单个分隔符和对分隔符可能称为记录分隔符和字段分隔符。由于文件记录 - 字段分类法的历史意义,这个术语的使用范围更广泛(参见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
等等) - 而且它将不清楚在这种情况下终结器是否也可以是更复杂的父结构中的分隔符。
答案 3 :(得分:0)
有趣的问题和答案。总而言之,1)分隔符标记某事物的“限制”,即开始和/或结束; 2)终结符只是“结束分隔符”的特殊术语; 3)分隔符需要两侧都有项目(与分隔符不同)。
我能想到的最好的例子是起始分隔符是编程语言中的起始 - 注释标记(“#”,“//”等)。
我能想到的最好的例子是终结符(end delimiter)是Unix中的换行符。这是一个用词不当 - 它总是终止(可能是空的)行,但并不总是开始一个新行,即它是文件中的最后一个字符。也许一个更好的常见例子是句子的简单句号。
我能想到的最好的例子就是简单的逗号。请注意,逗号永远不会出现在英语中,之前和之后都没有文本。
有趣的是,这些都不一定限于单字符。事实上,Unix中的awk(或者只是gawk?)允许FS(字段分隔符)为任何正则表达式。
此外,尽管“任何非零量的空白”在例如“单词定界符”中被认为是“单词定界符”。在wc命令中,regexp中还有零宽度的“字边界”说明符(例如\ b)。有意思考这样的零宽度项目/边界是否也可以被认为是“分隔符”。我倾向于不这么想(太多了)。
答案 4 :(得分:0)
当您从空开始时,终结符是分隔符。 A; B; C;实际上是A; B; C;空。
答案 5 :(得分:0)
此回复位于CSV的上下文中,因为所有提供的答案都集中在英语语言上。
分隔符是给定CSV规范中提及的描述内容边界的所有元素,分隔符是字段分隔符的通用名称,终结符是记录分隔符的通用名称。
分隔符是CSV格式规范的一部分,它定义了边界,而不必是可打印的字符。
终结符,分隔符和字段限定符是分隔符,但不是必须指定CSV格式,例如50列分隔符表示每50个列是一个值 - 每行中0-49的字符(通常用空格填充)是field0的值,50-99的字符是field1等的值。
终结者是一个分隔符,通常由换行符(LF
),回车符(CR
)或组合(例如CRLF
)表示,并标记单个CSV记录的结束
分隔符是一个分隔符,由打印字符(例如分号)表示,并标记CSV字段之间的分隔,已引入它以存储动态长度值。没有分隔符的CSV格式规范通常具有恒定的字段长度。
字段限定符是通常成对使用的分隔符,而不是转义序列,它是字段值中不允许的可打印字符(除非给定CSV格式规范提供转义序列)并标记开头和结尾一个字段,它被引入来存储包含分隔符的值。
转义序列是一个字符(或一组字符),它将转义序列后面的任何内容标记为非重要,因此作为字段值的一部分(例如反斜杠可能指定紧随其后的分隔符作为值)。此序列可以转义一个或多个字符。
答案 6 :(得分:0)
“word 1”,“word 2”\ NULL
答案 7 :(得分:0)
delimiter
有两种含义:
作为句子中使用的空间(边界)。
分隔符就像一个边界,exists between countries。
从这个意义上讲,必须有两个国家才能拥有疆界。
单词之间通常存在一个空格,但结尾不存在。该空格分隔单词,但不terminate
个句子(单词集合)。句子:
这是一个简短的句子。
具有四个空格,它们充当单词定界符。没有结尾空间。
实际上,通常还有两个未命名的分隔符:句子的开头和结尾。就像正则表达式中用于标记文本字符串的开始和结束的^
和$
一样。
而且,在人类语言中,标点符号(点,逗号,分号,冒号等)也可以用作单词定界符(除空格外)
用于引号(边界)。
这样的句子:
“这是一个简短的句子。”
用双引号(delimited
)表示“”
(开始和结束)。从这个意义上讲,它就像“平衡定界符”(Balanced Brackets in Wikipedia)。
有人可能会认为frontier
和边界本质上是相同的,并且在某些情况下它们实际上是正确的。
与定界符(边界)的第一个意义(上方)完全相同。
因此,separator
是许多计算机使用中分隔符的同义词。
划分单个“字段”的结尾。
就像Unix文本文件中的换行符一样。每行以换行符(\n
)结尾。
在适当的Unix文本文件中,所有行都将终止(甚至最后一行)。
类似的段落以人类语言的换行符结尾。
或者,more strictly,因为NUL(\0
)是terminator of a C string:
字符串被定义为由第一个零代码单元(通常称为NUL代码单元)终止的连续代码单元序列。
因此,终止符字符也是分隔符,但必须也出现在末尾。
Stackoverflow的标签仅用于分隔符和分隔符
delimiter定界符是一个或多个字符的序列,用于指定纯文本或其他数据流中单独的独立区域之间的边界。
separator分隔字符串各部分的字符。
终止符标记仅适用于Shell终端仿真器:
terminator终结者是GPL终端模拟器。
是的,定界符和分隔符是等效的许多次
除外,括号,花括号,方括号和类似的平衡式定界符。
答案 8 :(得分:0)
就像英语一样,在技术上也是正确的答案,并且是通常使用的答案,可能与寻求所用术语定义的编程用法有关。
业界早就使用“逗号分隔”文件来表示:
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