65.9K
CodeProject 正在变化。 阅读更多。
Home

Ring 编程语言的语法灵活性。

starIconstarIconstarIconstarIconstarIcon

5.00/5 (5投票s)

2016年10月10日

CPOL

5分钟阅读

viewsIcon

20491

downloadIcon

103

Ring编程语言提供了不同的输入/输出和控制结构风格,并支持更改语言的关键字和运算符。

 

引言

每种编程语言都有其风格和语法,程序员需要了解该语言的关键字、运算符和规则。经过多年的编程,每个程序员可能接触过许多风格各异的编程语言。此时,每个程序员可能偏爱不同的语法,并认为这种语法更自然、更简单和/或更高效。

为什么编程语言会强制程序员使用特定的语法?

* 易于实现。

* 实现速度更快。

* 易于阅读和理解用该语言编写的程序。

每种不同语法的优缺点是什么? 

* 有些风格易于编写。

* 有些风格很自然(易于阅读和理解)。

为什么有些程序员因为语法而喜欢/不喜欢某些语言?

* 因为他们知道另一种更符合他们期望的风格。

你最喜欢的语法是什么,为什么?

* 我偏爱使用特殊关键字的自然风格,但我发现其他风格编写起来更快。

注意:请随时回答上述问题,并根据您的经验添加更多想法/知识。

背景

作为一名近年来使用过许多编程语言的人,我可以肯定地说,有些语言相似,而有些语言则截然不同。许多语言共享相同的概念,解决相同的问题,并使用相同的编程范例,但语法、技巧、库、框架和工具却不同。要成为一名优秀的程序员,您可能需要了解使用不同编程范例的各种语言,这些语言能让您以不同的方式思考如何更好地解决问题。

在本文中,我将专注于一件事(语法)和一种编程语言(Ring 编程语言),以及该语言如何提供不同的语法风格,并使程序员能够更改语言的关键字和运算符。如何在同一个程序中使用不同的语法风格。何时以及为什么这可能有用。(您可以从以下网址下载 Ring:http://ring-lang.net,从以下网址下载语言源代码:https://github.com/ring-lang/ring

其他一些语言可能使用预处理器来实现类似的功能。另一些语言可能使用语法糖和运算符重载来规避这个问题,但 Ring 编程语言则以一种简单直接的方式提供了自己的解决方案,因此您可以利用这些功能来做一些有用的事情。

故事

当我于 2016 年 1 月 25 日发布 Ring 1.0 时,我的许多朋友(使用许多不同语言的开发者和程序员)都说(我喜欢这个语言的概念,但不那么喜欢它的语法,你能改变语法吗?)。我问他们为什么?每个人都给出了不同的答案,例如:

* 我想使用其他关键字!

* 我宁愿使用花括号 {} 而不是编写特定的关键字来结束每个控制结构。

* 我宁愿使用 'end' 关键字来关闭每个控制结构。

* 我想使用阿拉伯语关键字。

以及许多其他类似的事情。每个人都喜欢不同语言的语法,并希望使用 Ring 语言的概念,但仍然对其喜欢的语法感到满意。

使用代码

接下来的程序展示了 Ring 语言 1.0 版本的“Hello, World!”程序。

See "Hello, World!" + nl

'See' 关键字用于在屏幕上打印一些输出。Ring 1.0 使用 'See' 和 'Give' 来打印输出和获取用户输入。

Ring 1.1 也支持另一种风格,例如:

Put "Hello, World!" + nl

因此,使用 'Put' 和 'Get',我们可以打印输出并获取输入。

Ring 1.1 还提供了另一种风格:

load "stdlib.ring"

print("Hello World")

因此,第一种风格(See/Give)是开始(试图让用户更自然),第二种风格(Put/Get)是一次更新(试图让英语母语者更自然),第三种风格,使用 stdlib.ring 和 print() 函数,试图让程序员更自然(使用库/函数而不是命令)。

那么区别是什么?

(1):使用 See/Put 比使用 print() 更快,因为该命令带有虚拟机指令集中的特殊指令。而 print() 函数只是调用 See/Put 命令,所以在调用 See/Put 指令之前,我们有调用函数的开销。

(2):print() 函数是用 Ring 编写的,因此您可以轻松修改此函数。

(3):print() 函数接受转义字符,如 "\n" 和 "\t",而 See/Put 命令不提供此功能(速度更快)。

现在让我们看看控制结构的不同风格。

第一种风格(使用特殊关键字结束每个控制结构)。

if Expression
        Block of statements
but Expression
        Block of statements
else
        Block of statements
ok


switch Expression
on Expression
        Block of statements
other
        Block of statements
off

while Expression
        Block of statements
end

for identifier=expression to expression [step expression]
        Block of statements
next

for identifier in List/String  [step expression]
        Block of statements
next

do
        Block of statements
again expression

第二种风格(使用 end 关键字关闭每个控制结构)。

if Expression
        Block of statements
elseif Expression
        Block of statements
else
        Block of statements
end

switch Expression
case Expression
        Block of statements
else
        Block of statements
end

while Expression
        Block of statements
end

for identifier=expression to expression [step expression]
        Block of statements
end

for identifier in List/String  [step expression]
        Block of statements
end

try
        Block of statements
catch
        Block of statements
end

第三种风格(使用花括号)。

if Expression {
        Block of statements
elseif Expression
        Block of statements
else
        Block of statements
}

switch Expression {
case Expression
        Block of statements
else
        Block of statements
}

while Expression {
        Block of statements
}

for identifier=expression to expression [step expression] {
        Block of statements
}

for identifier in List/String  [step expression] {
        Block of statements
}

更改语言关键字。

ChangeRingKeyword  <oldkeyword>  <newkeyword>

更改语言运算符。

ChangeRingOperator  <oldoperator>  <newoperator>

示例

changeringoperator + plus
changeringkeyword SEE PRINT

Print 5 plus 5

您可以将一组 ChangeRingKeyword 和 ChangeRingOperator 命令存储在一个文件中,以便以后在多个源文件中使用。

文件:StyleBasicOn.ring

ChangeRingKeyword       see     print
ChangeRingKeyword       ok      endif
ChangeRingKeyword       next    endfor
ChangeRingKeyword       end     endwhile

文件:StyleBasicOff.ring

ChangeRingKeyword  print        see
ChangeRingKeyword  endif        ok
ChangeRingKeyword  endfor       next
ChangeRingKeyword  endwhile     end

示例

LoadSyntax "stylebasicon.ring"

x = 10
while x > 0
        print "x = " + x + nl
        for t = 1 to 10
                if t = 3
                        print "number three" + nl
                endif
        endfor
        x--
endwhile

LoadSyntax "stylebasicoff.ring"

see "done" + nl

输出

x = 10
number three
x = 9
number three
x = 8
number three
x = 7
number three
x = 6
number three
x = 5
number three
x = 4
number three
x = 3
number three
x = 2
number three
x = 1
number three
done

 

注意 (1):您可以在同一文件中混合使用不同的风格。

注意 (2):项目中的每个文件都可以使用不同的风格。

注意 (3):您可以使用 eval() 来执行字符串内的代码,并在使用 eval() 时更改关键字/运算符。

关注点

(1) 我们可以将语言(英语关键字)翻译成其他语言,例如使用阿拉伯语/法语关键字。

(2) 我们可以将用其他语言编写的代码移植到 Ring,并从 Ring 中支持这些语言(其他功能也有助于此,但本文为保持简洁,未涵盖)。

(3) 我们可以在同一个项目中混合使用不同的风格,每个程序员都可以使用他/她喜欢的风格编写代码。这有助于在每个程序员独立处理任务时(例如开发供他人使用但不修改的库)非常有益。

(4) 每个团队都可以为项目使用一种风格,但这种风格是基于与该团队精神相符的定制来定义的。

(5) 您可以在同一种语言中测试不同的风格。这将让您更好地理解每种风格(优缺点)。

历史

Ring 1.0 于 2016 年 1 月 25 日发布,只有一种语法(没有语法灵活性)。

Ring 1.1 于 2016 年 10 月 6 日发布,包含许多新功能,包括(语法灵活性)。

 

 

© . All rights reserved.