fbpx
维基百科

SNOBOL

SNOBOLStriNg Oriented and symBOlic Language),即“面向字符串符号式的语言”,是以SNOBOL4告终的一系列编程语言,由AT&T贝尔实验室David J. Farber英语David J. FarberRalph E. Griswold英语Ralph Griswold和Ivan P. Polonsky,在1962年至1967年间开发。它是在1950年代和1960年代,开发出的那些面向文本字符串的语言之一,其他语言包括COMITTRAC英语TRAC (programming language)

SNOBOL
编程范型符号式, 指令式, 非结构化, 非确定性
設計者David J. Farber英语David J. Farber, Ralph E. Griswold英语Ralph Griswold,Ivan P. Polonsky
實作者David J. Farber, Ralph E. Griswold, Ivan P. Polonsky, 贝尔实验室
发行时间1962年,​61年前​(1962
許可證2条款BSD许可证
網站www.snobol4.org
主要實作產品
SNOBOL, SPITBOL英语SPITBOL
啟發語言
COMIT
影響語言
AWK, bs英语bs (programming language), Icon, SL5, 采用关联数组的语言

概述

SNOBOL4超脱于同时代的多数编程语言的地方,是将模式(pattern)作为头等数据类型,这种数据类型的值,可以用编程语言中的任何其他数据类型所允许的所有方式来操纵,并且提供算符(operator)用于模式(pattern)串接交替英语Alternation (formal language theory)。SNOBOL4模式,是某一种类型的对象,并允许各种操纵,非常类似于后来的面向对象语言比如JavaScript中,那种叫做正则表达式的模式。此外,SNOBOL4在执行期间生成的字符串,可以被当作程序,而要么解释要么编译执行,如同其他语言中用eval函数那样执行。

在1960年代后期和1970年代前期,SNOBOL4在美国大学中被广泛教授,并在1970年代和1980年代,在人文学科中作为文本操纵语言被广泛使用。

在1980年代和1990年代,随着新的语言比如AWKPerl,使得通过正则表达式方式的字符串操纵成为时尚,对SNOBOL4的使用逐渐衰竭了。SNOBOL4模式归类为BNF文法,它等价于上下文无关文法,从而比正则表达式更强力[1]。不同于SNOBOL4模式,纯粹的正则表达式是不递归的,这带给了SNOBOL4模式,在计算上的明确优势[2];当前版本的AWK和Perl的“正则表达式”,实际上是对正则语言意义上的正则表达式的扩展(递归表达式于2007年十二月发行的Perl 5.10中仍未出现[3][4])。

SNOBOL的设计者之一Ralph Griswold,设计了SNOBOL4的后继者,叫做SL5和Icon,它们将SNOBOL4模式匹配回溯算法,与更标准的类ALGOL结构结合起来,同时增加了它们自己的一些特征。

特征

SNOBOL4支持很多内置数据类型,比如整数、有限精度的实数字符串模式数组,和首创的叫做表格(table)的关联数组,并允许编程者定义额外的数据类型和新函数。SNOBOL4的编程者定义数据类型的设施,在当时是先进的,它类似于更早的COBOL和更晚的Pascal编程语言中的记录

所有的SNOBOL命令行语句,都是如下形式的:

label subject pattern = object :transfer 

这五种元素每个都是可选项。“标号”(label)位于行首用来标识语句,没有标号的语句,开始于一个空白字符,特例的单一标号END表示程序结束。有四种基本类型的运算操作(operation):基础、赋值、模式匹配和模式匹配连带替换,所有运算操作,都有“主语”(subject)。基础操作运算,只有一个主语,构成主语的表达式被求值。赋值运算操作有“宾语”(object),等号右侧的值被赋予左侧的变量,如果对主语或宾语的求值失败,则不发生赋值。在模式匹配时,针对“模式”(pattern)对主语进行匹配;如果这时存在宾语,则经由替换规则,将其中任何匹配部份替换为宾语。“转移”(transfer)可以是绝对分支,即:(标号);或依赖于前面运算操作的成功(success)或失败(failure)的条件分支,即:S(标号1) F(标号2)。还可以转移到在运行期间程序自身所建立并编译的代码。

SNOBOL模式,可以非常简单也可以非常复杂。一个简单模式,可以是已知的文本字符串,比如"ABCD",或对未知字符串的种类的指定,比如模式函数LEN(1);而一个复杂模式,可以是一个大型的结构描述,例如一个计算机语言的完整文法。有可能在SNOBOL中实现一个语言的解释器,几乎直接源自它的巴科斯-诺尔范式表达式,加上一些改变即可。

SNOBOL采用了隐式的输入输出机制,分别用特殊标识符INPUT指示标准输入OUTPUT指示标准输出

SNOBOL4模式匹配,使用了回溯算法,这类似于逻辑编程语言Prolog所用的算法,它通过明确子句文法英语Definite clause grammar提供了类似模式的构造。这个算法使得利用SNOBOL作为逻辑编程语言,比大多数其他语言都要容易。

SNOBOL在一个单一的有垃圾回收的堆中,存储变量、字符串和数据结构。

SNOBOL在格式和编程风格的鲜明性上,匹敌于APL,不同于更“标准”的过程式语言如BASICFortranC语言,二者都是很激进的。

例子程序

Hello, World!程序

 OUTPUT = "Hello, World!" END 

向用户要求输入名字并把它填入输出句子中的简单程序:

 OUTPUT = "What is your name?" Username = INPUT OUTPUT = "Thank you, " Username END 

根据用户输入与二个模式的匹配情况在三种不同语气的输出中进行选择:

 OUTPUT = "What is your name?" Username = INPUT Username "J" :S(LOVE) Username "K" :S(HATE) MEH OUTPUT = "Hi, " Username :(END) LOVE OUTPUT = "How nice to meet you, " Username :(END) HATE OUTPUT = "Oh. It's you, " Username END 

持续要求用户一次一个输入自己所有的名字,直到只按Enter键表示再无后续者为止,最后告知用户一共输入了几个名字:

 OUTPUT = "This program will ask you for personal names" OUTPUT = "until you press return without giving it one" NameCount = 0 :(GETINPUT) AGAIN NameCount = NameCount + 1 OUTPUT = "Name " NameCount ": " PersonalName GETINPUT OUTPUT = "Please give me name " NameCount + 1 PersonalName = INPUT PersonalName LEN(1) :S(AGAIN) OUTPUT = "Finished. " NameCount " names requested." END 

当前实现

目前有一些实现能够获得。Macro SNOBOL4 in C是Phil Budne写的自由开源实现,能够在几乎所有平台上运行[5]。 Catspaw公司提供了对很多计算机平台的SNOBOL4语言商业实现,现在有可以免费获得的版本。Viktors Berstis的Minnesota SNOBOL4是最接近IBM大型主机版本的PC实现,也是免费的[6]

尽管SNOBOL自身没有结构化编程特征,有叫做Snostorm英语Snostorm的SNOBOL预处理器,由Fred G. Swartz于1970年代设计和实现,提供了IF、ELSEIF、ELSE、LOOP、CASE和PROCEDURE语句,并用于密歇根大学密歇根终端系统英语Michigan Terminal System(MTS)[7]

Andrew Koenig英语Andrew Koenig的Snocone向SNOBOL4增加了块结构构造。Snocone是自包含的编程语言,而非SNOBOL4的真超集[8]

SPITBOL英语SPITBOL编译器实现也介入了一些特征,尽管不使用传统的结构化编程关键字,却可以用来提供很多通常被认作“结构化编程”的等价能力,最显著的是嵌套if/then/else类型的构造。这些特征已经被增加到最新近的SNOBOL4实现中。经过了很多年作为商业产品之后,在2009年四月,SPITBOL成为了在GNU通用公共许可证下发行的自由软件[9]

参见

引用

  1. ^ Gimpel, J. F. 1973. A theory of discrete patterns and their implementation in SNOBOL4. Commun. ACM 16, 2 (Feb. 1973), 91-100. DOI=http://doi.acm.org/10.1145/361952.361960 (页面存档备份,存于互联网档案馆
  2. ^ Dr. Dobb's: Programs That Transform Their Own Source Code; or: the Snobol Foot Joke. Dobbscodetalk.com. [2011-12-04]. (原始内容于2013-05-12). 
  3. ^ Contact details. perlre. perldoc.perl.org. [2011-12-04]. (原始内容于2016-03-15). 
  4. ^ Recursive Regex Tutorial. [2017-03-19]. (原始内容于2017-03-20). 
  5. ^ . [2020-04-23]. (原始内容存档于2020-02-28). 
  6. ^ 存档副本. [2020-04-24]. (原始内容于2020-02-24). 
  7. ^ "SNOSTORM" (页面存档备份,存于互联网档案馆), MTS Volume 9: SNOBOL4 in MTS, Computing Center, University of Michigan, June 1979, pages 99-120. Retrieved 1 September 2014.
  8. ^ "The Snocone Programming Language" (页面存档备份,存于互联网档案馆), Andrew Koenig, USENIX (Portland, Oregon), June 1985. Retrieved 2 September 2014. software download link.
  9. ^ spitbol: Raw power and speed for non-numeric computation.. [2020-04-24]. (原始内容于2019-02-05). 

延伸阅读

  • Emmer, Mark B. SNOBOL4+: The SNOBOL4 Language for the Personal Computer User. Englewood Cliffs, NJ: Prentice Hall, 1985 (ISBN 0-13-815119-9).
  • Gimpel, James F. Algorithms in SNOBOL4. New York: Wiley, 1976 (ISBN 0-471-30213-9); republished Salida, CO: Catspaw, 1986 (ISBN 0-939793-00-8).
  • Griswold, Ralph E. The Macro Implementation of SNOBOL4. San Francisco, CA: W. H. Freeman and Company, 1972 (ISBN 0-7167-0447-1).
  • Griswold, Ralph E., J. F. Poage, and I. P. Polonsky. The SNOBOL4 Programming Language. Englewood Cliffs, NJ: Prentice Hall, 1968 (ISBN 0-13-815373-6).
  • Griswold, Ralph E. String and List Processing in SNOBOL4: Techniques and Applications. Englewood Cliffs, NJ: Prentice Hall, 1975 (ISBN 0-13-853010-6).
  • Hockey, Susan M.英语Susan Hockey Snobol Programming for the Humanities. New York: Clarendon Press; Oxford: Oxford University Press, 1985 (ISBN 0-19-824676-5).

外部链接

  • Phil Budne offers a free and open source BSD-licensed port of the original Bell Labs SNOBOL4 to UNIX and UNIX-like platforms(页面存档备份,存于互联网档案馆
  • Catspaw, Inc. offers implementations of and commercial support for SNOBOL4(页面存档备份,存于互联网档案馆
  • 开放式目录计划中和SNOBOL相关的内容
  • Oral history interview with Ralph E. Griswold—Griswold discusses development of SNOBOL Charles Babbage Institute英语Charles Babbage Institute, University of Minnesota, Minneapolis.
  • Charles Hall Collection on the SNOBOL Programming Language. Charles Babbage Institute英语Charles Babbage Institute, University of Minnesota, Minneapolis.
  • For a small brief taste of what SNOBOL4 is about try this online compiler
  • Try It Online (Snobol4/CSNOBOL)(页面存档备份,存于互联网档案馆) Online compiler

snobol, string, oriented, symbolic, language, 面向字符串且符号式的语言, 是以4告终的一系列编程语言, 由at, t贝尔实验室的david, farber, 英语, david, farber, ralph, griswold, 英语, ralph, griswold, 和ivan, polonsky, 在1962年至1967年间开发, 它是在1950年代和1960年代, 开发出的那些面向文本字符串的语言之一, 其他语言包括comit和trac, 英语, trac, p. SNOBOL StriNg Oriented and symBOlic Language 即 面向字符串且符号式的语言 是以SNOBOL4告终的一系列编程语言 由AT amp T贝尔实验室的David J Farber 英语 David J Farber Ralph E Griswold 英语 Ralph Griswold 和Ivan P Polonsky 在1962年至1967年间开发 它是在1950年代和1960年代 开发出的那些面向文本字符串的语言之一 其他语言包括COMIT和TRAC 英语 TRAC programming language SNOBOL编程范型符号式 指令式 非结构化 非确定性設計者David J Farber 英语 David J Farber Ralph E Griswold 英语 Ralph Griswold Ivan P Polonsky實作者David J Farber Ralph E Griswold Ivan P Polonsky 贝尔实验室发行时间1962年 61年前 1962 許可證2条款BSD许可证網站www wbr snobol4 wbr org主要實作產品SNOBOL SPITBOL 英语 SPITBOL 啟發語言COMIT影響語言AWK bs 英语 bs programming language Icon SL5 采用关联数组的语言 目录 1 概述 2 特征 3 例子程序 4 当前实现 5 参见 6 引用 7 延伸阅读 8 外部链接概述 编辑SNOBOL4超脱于同时代的多数编程语言的地方 是将模式 pattern 作为头等数据类型 这种数据类型的值 可以用编程语言中的任何其他数据类型所允许的所有方式来操纵 并且提供算符 operator 用于模式 pattern 串接和交替 英语 Alternation formal language theory SNOBOL4模式 是某一种类型的对象 并允许各种操纵 非常类似于后来的面向对象语言比如JavaScript中 那种叫做正则表达式的模式 此外 SNOBOL4在执行期间生成的字符串 可以被当作程序 而要么解释要么编译执行 如同其他语言中用eval函数那样执行 在1960年代后期和1970年代前期 SNOBOL4在美国大学中被广泛教授 并在1970年代和1980年代 在人文学科中作为文本操纵语言被广泛使用 在1980年代和1990年代 随着新的语言比如AWK和Perl 使得通过正则表达式方式的字符串操纵成为时尚 对SNOBOL4的使用逐渐衰竭了 SNOBOL4模式归类为BNF文法 它等价于上下文无关文法 从而比正则表达式更强力 1 不同于SNOBOL4模式 纯粹的正则表达式是不递归的 这带给了SNOBOL4模式 在计算上的明确优势 2 当前版本的AWK和Perl的 正则表达式 实际上是对正则语言意义上的正则表达式的扩展 递归表达式于2007年十二月发行的Perl 5 10中仍未出现 3 4 SNOBOL的设计者之一Ralph Griswold 设计了SNOBOL4的后继者 叫做SL5和Icon 它们将SNOBOL4模式匹配的回溯算法 与更标准的类ALGOL结构结合起来 同时增加了它们自己的一些特征 特征 编辑SNOBOL4支持很多内置数据类型 比如整数 有限精度的实数 字符串 模式 数组 和首创的叫做表格 table 的关联数组 并允许编程者定义额外的数据类型和新函数 SNOBOL4的编程者定义数据类型的设施 在当时是先进的 它类似于更早的COBOL和更晚的Pascal编程语言中的记录 所有的SNOBOL命令行语句 都是如下形式的 label subject pattern object transfer 这五种元素每个都是可选项 标号 label 位于行首用来标识语句 没有标号的语句 开始于一个空白字符 特例的单一标号END表示程序结束 有四种基本类型的运算操作 operation 基础 赋值 模式匹配和模式匹配连带替换 所有运算操作 都有 主语 subject 基础操作运算 只有一个主语 构成主语的表达式被求值 赋值运算操作有 宾语 object 等号右侧的值被赋予左侧的变量 如果对主语或宾语的求值失败 则不发生赋值 在模式匹配时 针对 模式 pattern 对主语进行匹配 如果这时存在宾语 则经由替换规则 将其中任何匹配部份替换为宾语 转移 transfer 可以是绝对分支 即 标号 或依赖于前面运算操作的成功 success 或失败 failure 的条件分支 即 S 标号1 F 标号2 还可以转移到在运行期间程序自身所建立并编译的代码 SNOBOL模式 可以非常简单也可以非常复杂 一个简单模式 可以是已知的文本字符串 比如 ABCD 或对未知字符串的种类的指定 比如模式函数LEN 1 而一个复杂模式 可以是一个大型的结构描述 例如一个计算机语言的完整文法 有可能在SNOBOL中实现一个语言的解释器 几乎直接源自它的巴科斯 诺尔范式表达式 加上一些改变即可 SNOBOL采用了隐式的输入输出机制 分别用特殊标识符INPUT指示标准输入 OUTPUT指示标准输出 SNOBOL4模式匹配 使用了回溯算法 这类似于逻辑编程语言Prolog所用的算法 它通过明确子句文法 英语 Definite clause grammar 提供了类似模式的构造 这个算法使得利用SNOBOL作为逻辑编程语言 比大多数其他语言都要容易 SNOBOL在一个单一的有垃圾回收的堆中 存储变量 字符串和数据结构 SNOBOL在格式和编程风格的鲜明性上 匹敌于APL 不同于更 标准 的过程式语言如BASIC Fortran或C语言 二者都是很激进的 例子程序 编辑 Hello World 程序 OUTPUT Hello World END 向用户要求输入名字并把它填入输出句子中的简单程序 OUTPUT What is your name Username INPUT OUTPUT Thank you Username END 根据用户输入与二个模式的匹配情况在三种不同语气的输出中进行选择 OUTPUT What is your name Username INPUT Username J S LOVE Username K S HATE MEH OUTPUT Hi Username END LOVE OUTPUT How nice to meet you Username END HATE OUTPUT Oh It s you Username END 持续要求用户一次一个输入自己所有的名字 直到只按Enter键表示再无后续者为止 最后告知用户一共输入了几个名字 OUTPUT This program will ask you for personal names OUTPUT until you press return without giving it one NameCount 0 GETINPUT AGAIN NameCount NameCount 1 OUTPUT Name NameCount PersonalName GETINPUT OUTPUT Please give me name NameCount 1 PersonalName INPUT PersonalName LEN 1 S AGAIN OUTPUT Finished NameCount names requested END当前实现 编辑目前有一些实现能够获得 Macro SNOBOL4 in C是Phil Budne写的自由开源实现 能够在几乎所有平台上运行 5 Catspaw公司提供了对很多计算机平台的SNOBOL4语言商业实现 现在有可以免费获得的版本 Viktors Berstis的Minnesota SNOBOL4是最接近IBM大型主机版本的PC实现 也是免费的 6 尽管SNOBOL自身没有结构化编程特征 有叫做Snostorm 英语 Snostorm 的SNOBOL预处理器 由Fred G Swartz于1970年代设计和实现 提供了IF ELSEIF ELSE LOOP CASE和PROCEDURE语句 并用于密歇根大学的密歇根终端系统 英语 Michigan Terminal System MTS 7 Andrew Koenig 英语 Andrew Koenig 的Snocone向SNOBOL4增加了块结构构造 Snocone是自包含的编程语言 而非SNOBOL4的真超集 8 SPITBOL 英语 SPITBOL 编译器实现也介入了一些特征 尽管不使用传统的结构化编程关键字 却可以用来提供很多通常被认作 结构化编程 的等价能力 最显著的是嵌套if then else类型的构造 这些特征已经被增加到最新近的SNOBOL4实现中 经过了很多年作为商业产品之后 在2009年四月 SPITBOL成为了在GNU通用公共许可证下发行的自由软件 9 参见 编辑同像性 Icon 编程语言 Unicon 编程语言 Snowball 编程语言 英语 Snowball programming language Snostorm 英语 Snostorm SPITBOL 英语 SPITBOL 引用 编辑 Gimpel J F 1973 A theory of discrete patterns and their implementation in SNOBOL4 Commun ACM 16 2 Feb 1973 91 100 DOI http doi acm org 10 1145 361952 361960 页面存档备份 存于互联网档案馆 Dr Dobb s Programs That Transform Their Own Source Code or the Snobol Foot Joke Dobbscodetalk com 2011 12 04 原始内容存档于2013 05 12 Contact details perlre perldoc perl org 2011 12 04 原始内容存档于2016 03 15 Recursive Regex Tutorial 2017 03 19 原始内容存档于2017 03 20 存档副本 2020 04 23 原始内容存档于2020 02 28 存档副本 2020 04 24 原始内容存档于2020 02 24 SNOSTORM 页面存档备份 存于互联网档案馆 MTS Volume 9 SNOBOL4 in MTS Computing Center University of Michigan June 1979 pages 99 120 Retrieved 1 September 2014 The Snocone Programming Language 页面存档备份 存于互联网档案馆 Andrew Koenig USENIX Portland Oregon June 1985 Retrieved 2 September 2014 software download link spitbol Raw power and speed for non numeric computation 2020 04 24 原始内容存档于2019 02 05 延伸阅读 编辑Emmer Mark B SNOBOL4 The SNOBOL4 Language for the Personal Computer User Englewood Cliffs NJ Prentice Hall 1985 ISBN 0 13 815119 9 Gimpel James F Algorithms in SNOBOL4 New York Wiley 1976 ISBN 0 471 30213 9 republished Salida CO Catspaw 1986 ISBN 0 939793 00 8 Griswold Ralph E The Macro Implementation of SNOBOL4 San Francisco CA W H Freeman and Company 1972 ISBN 0 7167 0447 1 Griswold Ralph E J F Poage and I P Polonsky The SNOBOL4 Programming Language Englewood Cliffs NJ Prentice Hall 1968 ISBN 0 13 815373 6 Griswold Ralph E String and List Processing in SNOBOL4 Techniques and Applications Englewood Cliffs NJ Prentice Hall 1975 ISBN 0 13 853010 6 Hockey Susan M 英语 Susan Hockey Snobol Programming for the Humanities New York Clarendon Press Oxford Oxford University Press 1985 ISBN 0 19 824676 5 外部链接 编辑Phil Budne offers a free and open source BSD licensed port of the original Bell Labs SNOBOL4 to UNIX and UNIX like platforms 页面存档备份 存于互联网档案馆 Catspaw Inc offers implementations of and commercial support for SNOBOL4 页面存档备份 存于互联网档案馆 开放式目录计划中和SNOBOL相关的内容 Oral history interview with Ralph E Griswold Griswold discusses development of SNOBOL Charles Babbage Institute 英语 Charles Babbage Institute University of Minnesota Minneapolis Charles Hall Collection on the SNOBOL Programming Language Charles Babbage Institute 英语 Charles Babbage Institute University of Minnesota Minneapolis For a small brief taste of what SNOBOL4 is about try this online compiler Try It Online Snobol4 CSNOBOL 页面存档备份 存于互联网档案馆 Online compiler 取自 https zh wikipedia org w index php title SNOBOL amp oldid 71378666, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。