Compiler construction 编译器如何处理数据类型 我很难理解如何用C++之类的编译器来处理数据类型。 当从键盘输入数字123时,我们会在屏幕上看到相同的数字,但取决于存储的数据类型不同。即使输入相同的键盘笔划,转换数据类型背后的算法是什么?为什么数字的存储和显示方式不同?例如,在上述情况下,如果数字123是int类型,它将存储为01111011(1字节),但是如果它是字符串类型,它将存储为3字节(每个数字一个字节)。但在这两种情况下,我们在屏幕上看到相同的数字。计算机是否使用不同的字节来存储和显示数字? 我的问题是,当我们输入任何数字时,它是否通过ASCII表查找该数字的字符代码,然后编译器进行某种处理,将该数字存储在适当的数据类型中并显示该数字

Compiler construction 编译器如何处理数据类型 我很难理解如何用C++之类的编译器来处理数据类型。 当从键盘输入数字123时,我们会在屏幕上看到相同的数字,但取决于存储的数据类型不同。即使输入相同的键盘笔划,转换数据类型背后的算法是什么?为什么数字的存储和显示方式不同?例如,在上述情况下,如果数字123是int类型,它将存储为01111011(1字节),但是如果它是字符串类型,它将存储为3字节(每个数字一个字节)。但在这两种情况下,我们在屏幕上看到相同的数字。计算机是否使用不同的字节来存储和显示数字? 我的问题是,当我们输入任何数字时,它是否通过ASCII表查找该数字的字符代码,然后编译器进行某种处理,将该数字存储在适当的数据类型中并显示该数字,compiler-construction,types,Compiler Construction,Types,感谢堆您真的很想得到一本关于编译器的书来正确地回答这个问题,但特别是对于数字字符串,您将在编译的词法分析阶段这样做 编译器扫描程序文本并尝试形成标记,这些标记是语法的基本构建块,因此字符串、{、数字等 假设你得到了这样的结果 int i=10 编译器扫描这一行并尝试创建令牌。首先它扫描i,n,t,然后当它到达空格时停止,因为它会将空格视为delimeter。它根据内部列表检查值“int”,并生成相应的令牌 它继续遍历字符串并检测变量i,一个等号,然后是一个数字 它从字符串“10”中识别数字的方式

感谢堆

您真的很想得到一本关于编译器的书来正确地回答这个问题,但特别是对于数字字符串,您将在编译的词法分析阶段这样做

编译器扫描程序文本并尝试形成标记,这些标记是语法的基本构建块,因此字符串、{、数字等

假设你得到了这样的结果

int i=10

编译器扫描这一行并尝试创建令牌。首先它扫描i,n,t,然后当它到达空格时停止,因为它会将空格视为delimeter。它根据内部列表检查值“int”,并生成相应的令牌

它继续遍历字符串并检测变量i,一个等号,然后是一个数字

它从字符串“10”中识别数字的方式可能是引号,但这取决于语言

这就是为什么要用10L或10f来表示您正在创建一个长值或浮点值,否则编译器无法判断


甚至可能你真的想买一本关于编译器的书来正确回答这个问题,但特别是对于数字字符串,你会在编译的词法分析阶段这样做

编译器扫描程序文本并尝试形成标记,这些标记是语法的基本构建块,因此字符串、{、数字等

假设你得到了这样的结果

int i=10

编译器扫描这一行并尝试创建令牌。首先它扫描i,n,t,然后当它到达空格时停止,因为它会将空格视为delimeter。它根据内部列表检查值“int”,并生成相应的令牌

它继续遍历字符串并检测变量i,一个等号,然后是一个数字

它从字符串“10”中识别数字的方式可能是引号,但这取决于语言

这就是为什么要用10L或10f来表示您正在创建一个长值或浮点值,否则编译器无法判断


或者甚至可能

也许你只需要读一本关于编译的书。你的问题太广泛了,无法在这里回答。leppie谢谢你的建议。如果你能给我指出任何网站或文章,我将不胜感激。@user2031427看看ANTLR.org,它是一个创建具有GUI的编译器的工具。这将增加你的理解。M也许你只需要读一本关于编译的书。你的问题太广泛了,无法在这里回答。谢谢你的建议。如果你能给我指出任何网站或文章,我将不胜感激。@user2031427看看ANTLR.org,它是一个创建具有GUI的编译器的工具。这将增加你的理解。谢谢AnthonyM。我去了粗略浏览那些网站,但仍然找不到答案。谢谢AnthonyM。我浏览了那些网站,但仍然找不到答案。