编程语言在其语法中不允许的东西

时间:2012-12-22 16:48:27

标签: programming-languages compiler-theory

我从未在任何编程语言中看到过一些东西,我知道为什么。我相信这些东西可能有用。如果你指出,也许解释会很明显。但是我们走了。

为什么10²的语法无效? 有时,我们希望通过使用这样的符号来表达(就像在纸上一样)而不是预先计算的值(有时,这是一个很大的数字,并且,当第一次看到时,使一些困难,我相信它的目的是_在D和Java编程语言中)或仍然为此调用数学函数。当然,我要对编译器说这个变量的值替换为计算值,不要在运行时保留它。

标识符中的 - 。为什么 - 像我这样不能接受?(只是lisp方言),int name-size = 14;并不意味着不可读。或者这个“限制”属于计算机的字符集?

当有人回答我的问题时,我会很高兴。此外,如果您有另一个要求的指针,只需编辑我的答案并在其版本上发布说明或发布为评论。

2 个答案:

答案 0 :(得分:6)

好的,你提出的两个具体问题是:

  1. 10 2 - 您希望如何输入?除了标识符之外,编程语言倾向于坚持使用ASCII。请注意,可以在Java和C#中使用double x = 10e2; ...但e形式仅对浮点文字有效,而不是整数。

    正如评论中所指出的那样,exponentiation is supported in some languages - 但我怀疑它在大多数情况下都不值得额外的复杂性。

  2. 带有-的标识符会导致使用中缀运算符的语言明显不明确:

    int x = 10;
    int y = 4;
    int x-y = 3;
    int z = x-y;
    

    z是否等于3(x-y变量的值)还是等于6(从y减去x的值)?显然,你可以提出关于会发生什么的规则,但是通过从标识符中的有效字符列表中删除-,这种歧义就会被删除。使用_或仅使用大小写(nameSize)比在语言中提供额外规则更简单。无论如何,你会在哪里停下来? .作为标识符的一部分,或+

  3. 通常,您应该知道语言可以轻松遭受太多功能。特别是C#团队对于使用新功能以使其成为语言的高度非常开放。必须设计,指定,实现,测试和记录每个新功能,然后开发人员必须了解它,如果他们要了解使用它的代码。这并不便宜,所以优秀的语言设计师自然是保守的。

答案 1 :(得分:1)

Can it be done?

  

2.⁷

     

1.617 *10.ⁿ(13)

显然是的。您可以修改ruby(定义utf-8命名函数和猴子补丁数字类)或create User-defined literals in C++等语言以获得额外的表达能力。

应该这样做吗?

你会如何输入这些字符?

你会使用哪个unicode,例如,euler的常量? U+2107

我会说我们坚持使用我们可以输入并同意的代码。