何时使用术语"分隔符","终结符"和"分隔符"

Tim*_*ner 24 terminology delimiter separator semantics

使用"分隔符","终结符"和"分隔符"这几个词后面的语义是什么?例如,我相信在每个令牌之后会出现一个终结符,并且每个令牌之间都有一个分隔符.分隔符是否与其中任何一个相同,或者它们只是分隔符的形式?

SO有三个标签,但它们不是彼此的同义词.这是因为他们都真的不同吗?

Ian*_*son 22

分隔符表示某事物的界限,它在哪里开始,在哪里结束.例如:

"this is a string"
Run Code Online (Sandbox Code Playgroud)

有两个分隔符,这两个分隔符恰好是双引号字符.分隔符表示事物的一部分,什么不是.

分隔符按顺序区分两件事:

one, two
1\t2
code();  // comment
Run Code Online (Sandbox Code Playgroud)

分隔符的作用是划分两个不同的实体,以便区分它们.(请注意,我说"两个",因为在计算机科学中我们通常都在谈论处理线性字符序列).

终止符表示序列的结束.在CSV中,您可以将换行视为在一行上终止记录,或将一条记录与下一条记录分开.

令牌边界通常由语法类的更改表示:

foo()
Run Code Online (Sandbox Code Playgroud)

因为可能会被标记化word(foo),lparen,rparen也有不标记之间任何明确的分隔符,但标记生成器将识别字母和标点符号之间的语法类的变化- .

这些类别并不完全不同.例如:

[red, green, blue]
Run Code Online (Sandbox Code Playgroud)

可以(取决于您的语法)是三个项目的列表; 括号分隔列表,右括号终止列表并标记blue令牌的结尾.

至于SO将这些术语用作标签,它们只是:用于指示问题主题的标签.标签没有统一的受控词汇表; 任何有足够业力的人都可以添加新标签.存在足够的术语差异,在SO涵盖的所有主题中,您永远不会有单一的受控标签词汇表.

  • 确实如此,但他的版本比维基百科中的版本更有意义。分隔符分隔事物(例如“...”),分隔符分隔事物(例如...、...)。无论谁造成了混淆的通用定义,使人们将分隔符称为“定界符”,都没有为任何人提供任何服务。 (2认同)

Ian*_*ham 13

从技术上讲,分隔符介于两者之间,可能是为了告诉您一个字段的结束位置和另一个字段的开始位置,例如逗号分隔值(CSV)文件.

终结符在某事物的结尾处,终止行/输入/任何东西.

分隔符可以是分隔符或任何其他分隔事物的分隔符.例如,考虑英语中单词之间的空格.

您可以争辩说换行符是行终止符,行的分隔符或分隔两行的东西.因此,Unicode规范中有一些不同的换行符.


Jam*_*son 7

一个分隔符是一个或两个标记,显示的开始和结束的东西。他们是需要的,因为我们不知道那个“东西”会持续多久。我们可以有: 1.单个分隔符,或 2. 一对分隔符

  • [a, b, c, d, e]每个逗号 ( ,) 都是一个分隔符。左右括号 ( [, ]) 是对分隔符
  • "hello", 两个引号 ( ") 是对分隔符

一个分隔符是一个“分隔符”的代名词,但是从我的经验,通常是指字段分隔符。字段分隔符充当一个字段和它后面的字段之间的分隔符,这就是为什么可以将它们视为“分隔”的原因。

  • <file1>?<file2>?<file3>, 文件分隔符 ( ?) 尽管名称明确具有“分隔符”,但它既是分隔符又是分隔符

一个终止标记的一组东西中,再次必需的,因为我们不知道它有多长的结束。

  • abdefa\0,这里的空字符\0是一个终止符,告诉我们字符串已经结束。
  • foo\n,这里的换行符\n是一个终止符,告诉我们该行已经结束。

术语、定界符、分隔符源自经典的存储思想,从概念上讲,由文件、记录和字段组成(一个文件有很多记录,一个记录有很多字段)。在这种情况下,单个定界符和成对定界符可能被称为记录定界符字段定界符。由于 files-records-field 分类法的历史意义,该术语有更广泛的用途(请参阅 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
    
    Run Code Online (Sandbox Code Playgroud)

    在这里,,而且\n我们知道是单一的分隔符,但也可能被称为记录分隔符字段分隔符分别。


对于复杂的嵌套结构,终止符也可以是定界符/分隔符(它们不是相互排斥的定义)。在前面的示例中,===文件内部的标记可以被视为终止符(它是文件的结尾)。但是当我们查看许多文件时,它们的===作用就像一个分隔符/分隔符。

  • 考虑 UNIX 文件中的行

    This is line 1\n
    This is line 2\n
    This is line 3\n
    
    Run Code Online (Sandbox Code Playgroud)

    换行符既是终止符(它们告诉我们字符串的结束位置)也是定界符(它们告诉我们每一行的开始和结束位置)。来自维基百科

    两种查看换行符的方法,这两种都是自洽的,换行符要么分隔行,要么终止行。

实际上,当您谈论一个单独的项目时,您只需要说“终止符”(仅一个 string 1234\0,仅一个 lineabcd\n等)——并且不清楚这种情况下的终止符是否也可以是更复杂的父结构中的分隔符。