程序语言中的变量名为什么不能以数字开头

  Java变量命名规则:

1、 项目名全部小写

2、 包名全部小写

3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。

如:public class MyFirstClass{}

4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。

如:int index=0;

       public void toString(){}

5、 常量名全部大写

如:public static final String GAME_COLOR=”RED”;

6、所有命名规则必须遵循以下规则:

扫描二维码关注公众号,回复: 7993748 查看本文章

1)、名称只能由字母、数字、下划线、$符号组成

2)、不能以数字开头

3)、名称不能使用JAVA中的关键字。

4)、坚决不允许出现中文及拼音命名。

”定义中说的很清楚变量名不能以数字开头,其实不但是Java语言这样定义,所有的语言应该都是这样定义的。

那么它为什么不能以数字开头呢?

1.从编译原理的角度来解释:

       先来说明一下我们的这个语法解析工具,要解析的脚本很简单,只包括了&,|,~,=,!=,()和{}等操 作符。开始时采用了编译原理的那一套,画NFA、DFA,找出状态  然后再写词法分析生成Token,接着语法分析将生成的Token根据语义生成语法树, 最后求值。后来想一想,这个脚本很简单只需要一个一个字符判断遇到不同类型的字符就进入到不同的子函数中进行处理,同时完成词法解析和语法分析以及求值的 过程。不过无论使用那种方法都需要根据读入的字符来判断当前进入到哪个Token里了,这就是问题的关键所在。
        为什么说判断字符属于哪个Token是关键呢?假设我们取消掉了变量名定义中不能以数字开头的限制,这时当词法分析器进入到一个Token分析的起始状态 时,如果读取的第一个字符为数字,那么词法分析器是无法判断它当前要分析的这个Token是变量名还是数字常量了。好,如果你说分析器可以根据后面的字符 来判断的话,那么如果下一个字符为字母,那么很容易就判断出当前Token属于变量名(我们暂且忽略保留关键字),但是当如果接下来的字符全都是数字那怎 么办?分析器将无法判断,因为变量名的定义中允许数字的存在。

 2.从实例上来说:

  上面也许说的比较绕口难于理解,用句简单例子来说明:

   String 123="hello world";(当然这编译是不通过的!只是举个例子)

   int num=123;

   这时分析器就不知道“123”该是数值常量还是变量名了。

总而言之,编译器在解析程序的时候,读到一个单词的第一个字符就需要知道当前这个单词属于那一类,这样方便于解析,不用回溯。

猜你喜欢

转载自www.cnblogs.com/yhxb/p/11942108.html