Delphi保留字和标识符

问题描述:

在Delphi中声明变量使我想到了一个我无法理解的东西。Delphi保留字和标识符

问题是这样的:声明字符串,人们可以观察到string是一个保留字,同时宣布其他数据类型,比如整数数据类型修饰符是不是保留字,但一个标识符(即Integer,资本我这样讲)。实际上,Delphi允许你去定义Integer,你发现它的定义包含在System单元中,但它只是代表性的,因为有一条评论指出一些常量(如True),标识符(如Integer),函数和过程直接内置于编译器中。

我无法弄清楚这个选择背后的原因。

有人可以帮忙吗?


stringInteger类型之间的区别的一点解释。下面的代码

type 
    Integer = Char; 

var 
    I: Integer; 

begin 
    I:= 'A'; 
    ShowMessage(I); 
end; 

是正确的,按预期工作,而下一行

type 
    string = Integer; 

给编译时错误。

+4

Delphi *不区分大小写。 – 2012-01-03 14:29:50

+2

是的,我知道。尽管Delphi不区分大小写,但根据InfixCaps约定,它被认为是一种很好的编程习惯。我也一样, – 2012-01-03 14:33:51

+5

+1,因为这是一个有趣的问题,尽管可能没有“明确的”答案。然而,我个人的猜想是,'string'类型被很多compuler魔法所包围,所以它被提升为'保留字'而不是'Ctrl +可点击的内置类型'... – 2012-01-03 14:44:56

据我所知string是Turbo Pascal时代以来的保留字。所以保持这种方式的原因必须是兼容性的。

Pascal - > Turbo Pascal - > Object Pascal - > Delphi。

检查这些资源。

+2

起初,我相信,'string'被列为由Borland作为所谓的“结构化”的类型之一,以'array'和'record'一起,因为它有额外的语法元素它(方括号,最大长度说明)。因此它不得不成为一个保留字,用一种特殊的方式进行分析,而不像简单的类型,它们只是标识符,比如'Integer'或'Real'。 – 2012-01-03 15:49:59

+0

@AndriyM它仍然有额外的语法元素 – 2012-01-03 15:50:41

+1

@DavidHeffernan:是的,在“老办法”时,它会自动认为是'ShortString',我知道了。我的观点是,最初它严格地说是一种结构类型。现在它更常用作简单的字符串(指针)类型(语法上),并且由于旧用法的支持,它可能必须保留为保留字。 – 2012-01-03 16:00:35

string必须保留字,因为它并非专门用于指代System.[Ansi|Unicode]String类型。如果string是某些内部编译器类型的简单别名,那么string[20]将不再起作用。这对于Integer不是问题,因为Integer总是意味着“System.Integer”类型。

+1

我怀疑这个字符串*必须*是一个保留字;我宁愿认为turbo pascal编译器设计器实现'string'作为保留字更容易。 – kludg 2012-01-03 16:01:31

+0

好的。如果'type'不是'string',或者'string'不解析为'System.UnicodeString',你可以创建一个允许任何'type [length]'类型的解析器并发出错误。但你为什么? – hvd 2012-01-03 17:38:14