REBOL

REBOL(發音reb-ol ['reb-ol],英文Relative Expression Based Object Language的缩写),自R3发行版改称为Rebol,是跨平台的数据交换语言和多范型的动态编程语言。由AmigaOS的系统架构师设计,用于网络通信和分布式计算。

简介
REBOL介入了方言化的概念:用于代码和数据的小型的、优化的领域特定语言,据设计者所说这是这个语言最显著的性质:“尽管它可以用于编程、写函数和进行处理,它最大的长处是轻易的建立领域特定语言或方言的能力。”

知名于JavaScript开发上贡献的道格拉斯·克羅克福特,曾经描述Rebol为是对JSON有影响者之一:“更加现代的语言,但具有一些非常类似于Lisp的想法,它全部建造在数据表示之上,然后再被作为程序执行。,Rebol版本R3解释器于2012年12月12日在Apache 2.0许可证下发行。老版本能以二进制形式获得到,没有发行它们的源代码的规划。

Rebol已经被用于编程互联网应用(客户端和服务器端二者)、数据库应用、实用工具和多媒体应用 。在“可视界面方言”(VID)中return是一个关键字,导致布局引擎去模拟一个回车返回,移动“呈现笔”下至下一行的开始处,数字、钱款、字符等。注意在单词中允许特殊字符,所以a+b是一个单词,不同于a + b,它是空格分隔的三个单词。

注释可以出现在分号之后直到行结束。多行注释或不被词法分析器忽略的注释,可以使用平常的数据类型比如多行字符串来书写。

语义
块包含领域特定语言,它可以作为实际参数提交给特定的“求值器”函数。

do
最常用的求值器是do函数。它被缺省的用来解释给解释器控制台的文本输入。

由do函数解释的“执行方言”,是一个的“数据交换方言”的子语言。语言的主要语义单元是。对比于派生自ALGOL的指令式编程语言,“执行方言”既没有关键字也没有语句。

单词被用作大小写不敏感变量。像在所有动态类型语言中那样,变量没有关联的类型,类型是关联于值的。在do函数遇到一个单词的时候,返回对这个单词的求值结果。set-word单词可以用于赋值。尽管没有语句,赋值和有副作用的函数在一起,可以用于指令式编程。

根块的子块自行用do求值。块作为解释器实际参数这个性质被用来处理数据块,通过把块作为实际参数提交给控制函数如if、either、loop等用于结构化编程,在把块传递给特定解释器函数时用于方言。

值得注意的特殊问题是赋值给变量的复合值是不复制的。要制作一个复本,这个值必须传递给copy函数。

do函数通常服从前缀表示法求值,这里函数处理跟随在其后的实际参数。但是,也存在使用中缀算符的中缀求值。中缀求职优先于前缀求值。例如:
abs -2 + 3
返回1,因为中缀加法优先于计算绝对值。在求值中缀表达式的时候,求值的次序是从左至右,没有算符优先于其他算符。例如

2 + 3 * 4

返回20,对于乘法优先于加法的求值这将产生14。所有算法都有前缀版本。Do在将实际参数传递给函数之前通常对实际参数进行求值。所以,下列表达式:

print read http://zh.wikipedia.org/wiki/Rebol

首先读取维基百科的Rebol页面,接着把结果传递给print函数。圆括号可以用来改变求值的次序。使用前缀表示法,可以避免使用圆括号。

这种简单的优先级规则有如下优势:

  • 不需要在写表示式的时候查看优先级表格,
  • 不需要在定义新算符的时候重写优先级表格,
  • 表达式可以轻易的从中缀转写成前缀表示法或反之。

还有一个劣势:
*习惯了常规优先级规则的用户容易出错。

parse
parse函数适合用于规定、验证、变换和解释方言。它通过在运行时间匹配“解析表达式”来完成工作。

“解析表达式”是使用“解析方言”来书写的,它类似于“执行方言”,是“数据交换方言”的面向表达式的子语言。不同于“执行方言”,“解析方言”使用关键字来代表算符和大多数重要的非终结符,中缀分析算符没有前缀等价者并使用优先级规则(序列优先于选择)。

动作也可以被包含而在解析处理期间进行,并且parse函数可以被用来处理块或字符串。在“字符串解析”层级,parse必须处理“低层”解析,需要考虑到字符和。“块解析”是更高层级,处理在Rebol值的级别上的扫描。

解析方言属于由或解析表达文法(PEG)为代表的文法家族。主要的类似性是所有家族成员都有序列和选择算符的出现。解析方言的语法和在解析方言和PEG之间的类似性可以用分析算术表达式的PEG示例的如下转写来展示:

Digit: charset [#"0" - #"9"]
Value: [some Digit | "(" Expr ")"]
Product: [Value any [["*"| "/"] Value]]
Sum: [Product any [["+"| "-"] Product]]
Expr: Sum
parse/all "12+13" Expr

引用
延伸阅读
*
*

外部链接
*

评论 (0)

  • 还没有评论,来抢沙发吧。