首页 > 教育学习 > 为什么 > 为什么计算机语言中的变量名都不能以数字开头呢?

为什么计算机语言中的变量名都不能以数字开头呢?
2012-01-19 18:57:24   来源:   点击:

    为什么计算机语言中的变量名都不能以数字开头呢?

    14 个答案

    • 答案 1:

      最近刚好在上编译原理,应该算是词法分析的问题。因为每次输入“头符号”后要判断该符号是数字还是字符,如果是数字,则可以直接跳入数字处理的模块,若是字符则按变量名来处理。如果允许变量名以数字开头,则以后每次输入一个符号都要做一次“是否为数字”的判断,直到符号出现非数字再转成变量名,而禁止以数字开头只需要判断一次,很显然“每一次都要判断”是一种极大的浪费。另外变量名以数字开头对程序员而言也没有任何的帮助,反而降低了编译器的性能,毕竟O(1)和O(n)还是差距不小的。这是我自己做完编译原理词法分析实验后的一些看法,水平有限,希望各位指正。
    • 答案 2:

      主要是工程折衷。程序语言的分析分词法和语法两部分。词法分析主要用的是正规文法,也就是三型文法。这类文法主要采用正则表达式分析。正则文法分析器的特点是它是不回溯的,所以实现很简单。如果一个变量以数字开头,那么分析器就必须在遇到第一个或第二个英文字符的时候回溯来确定是否是数字、变量名还是词法错误,这时候就变成了二型文法。二型文法分析器的好处是支持回溯和递归语法(所以语法分析是靠它的),但是缺点是状态机相比正则文法状态大大增加,而且代码写起来更困难。考虑到词法分析部分只是用来断字,我们实在是没有为了支持变量名以数字开头这么一个小功能而让整个词法分析部分用二型文法写。故,最后大家都默认了变量要避免用数字开头。
    • 答案 3:

      如果以数字开头,这个变量就可能是纯数字了,这样语言的编译器(或解释器)就分不清当前的是数字还是变量名了。即使不是纯数字,如100000L在有些语言中表示长整型,还是会有歧义的。
    • 答案 4:

      编译的过程中,源文件先根据正则表达式规则扫描、分割成tokens(这一步叫做词法分析 lexical analysis),然后根据tokens和保留字的顺序和编程语言的规范组成语法分析树(这一步叫做syntax analysis),最后才是句法分析(semantic analysis)。其中有很多优化,也尽量合并步骤,目标是使得尽量少的扫描原文,减少时间复杂度。一门语言既要考虑符合人类的习惯,又要考虑适当的规范使得编译器能够非常快的扫描。所以说一个token是变量还是常量(数字),应该在越早的时候就确定下来,而变量第一个符号规定不能为数字而是字母,一是符合人类习惯(你看到一个数字打头的东西比如123l23也许也会感觉是数字,而且有研究表明人类对单词的词首和词尾更敏感),二是方便正则表达式扫描的时候在一开始就区分开,一举两得,这个规定是有意义的。
    • 答案 5:

      不严谨来说,一个程序写出来,本身是一个大字符串,编译器对它进行词法扫描,把这个“字符串”变成一个“词串”。在这一轮扫描中,为了实现简单,要求其输入符合正规文法,也就是说,逐个字符扫描,不能走回头路。如果遇到数字,自动机就进入扫描数值的状态,如果遇到字母,则进入其它的状态。若是允许变量以数字开头,那当编辑器扫描到一个数字时,就无法判断它是数字还是字母,就需要进入一个待定状态,后面再去判断到底是变量还是数字。这倒不是不能实现,只是没有必要费这个劲。
    • 答案 6:

      除了楼上们说的,还有一个原因是:即便允许数字开头,那也必需再加一句:“但不能只包含数字。”
    • 答案 7:

      在不降低可用性的前提下,简化词法分析器的实现,避免不必要的复杂性。
    • 答案 8:

      如7楼所说的,其实有些语言的变量名是可以用数字开头的,只是不能完全是数字,如1a在C语言当中就是非法的,但是在Common Lisp里面就是可用的~
    • 答案 9:

      1.主要还是习惯,数学变量通常是x_1, x_2,下标都写在右侧,计算机语言沿袭这一些管是很正常的事情;2.词法解析一般是从左到右的,10000L遇到L可以很自然作为一个终结符,但如果允许1000Lesbian,那么L就没办法作为终结符,需要从e开始判断。这样需要记住一个像L这样的字节作为Buffer,判断起来就不是很简洁。
    • 答案 10:

      如楼上所言,容易产生歧义,除了 1000000L 之外,还有 102h 表示 hex 等。
    • 答案 11:

      如果以数字开头,16进制与变量就出现混淆了,如0x10, 0xFF
    • 答案 12:

      在《javascript权威指南》上刚好看到了一句:P26.数字不允许作为首字符出现,这样javascript就可以轻易的区别开标识符和数字了;或许能这样解释 :)
    • 答案 13:

      这是考虑计算机没那么智能的识别关键字,编译器的词法分析器的分析能力也是有限的
    • 答案 14:

      就好像不少网站都不准使用纯数字作为用户名(变量名)一样,为了和用户ID(数值)区分开来……

相关热词搜索:

上一篇:大家平时所说的“很治愈”形容的是怎样一种感受?
下一篇:双向情感障碍有什么有效的调整办法么?