在语法上是否需要明确的开放和封闭分隔符?

Mat*_*man 10 c# ruby haskell language-design

在智能引号和编程语言之间进行类比时,我想到打开和关闭分隔符的不同字符可能不是必需的,而只是可读性的选择.

例如,Ruby的匿名函数中的参数使用相同的管道来打开和关闭.Haskell使用极端偏见的白色空间.

如果不同的我不问类型的分隔符是必要的-为索引括号,括号为块-但无论是独特的打开和关闭括号(如())是语法上是必须的大多数语言,或只是设计者的偏好.

Nor*_*sey 10

在语法上不是必需的,但如果打开和关闭分隔符是相同的,则使得嵌套事物变得困难(或不可能).图表A是POSIX shell,其中

var=`command`
Run Code Online (Sandbox Code Playgroud)

被替换为

var=$(command)
Run Code Online (Sandbox Code Playgroud)

正是因为具有相同开始和结束分隔符代码不会嵌套.

  • 您所做的是将嵌套深度编码到分隔符中,将深度表示为_unary_数字(使用\`为零和\作为后继者),然后决定需要2 ^ n-1个后继实例而不是n.可怕! (2认同)

Chr*_*ung 8

具有不同的分隔符允许嵌套.Ruby的块参数列表不支持嵌套,因此使用相同的分隔符是可以的.


bdo*_*lan 6

在C和C++中,裸大括号可以嵌套,并打开嵌套的词法范围:

{
    int a = 42;
    {
        int a = 24;
        {
            printf("%d\n", a); // prints 24
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用相同的分隔符,这是不明确的:

|
int a = 42;
|
int a = 24;
| // Is this an open or close pipe?
printf("%d\n", a); // 24? 42?
| // could be a pair
| // of open+close
|
Run Code Online (Sandbox Code Playgroud)

鉴于C语法规则的普遍存在,可能会有许多其他类似问题的语言(perl,for one).