【问题标题】:how data types are processed by CompilerCompiler 如何处理数据类型
【发布时间】:2013-02-01 05:53:01
【问题描述】:

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

谢谢大家

【问题讨论】:

  • 也许你只需要读一本关于编译的书。您的问题太宽泛,无法在这里回答 IMO。
  • leppie 感谢您的建议。如果您能指出我的任何网站或文章,我将不胜感激。
  • @user2031427 看看 ANTLR.org,它是一个创建具有 GUI 的编译器的工具。这将增加你的理解。

标签: compiler-construction types


【解决方案1】:

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

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

假设你得到了这样的东西

int i = 10

您的编译器会扫描此行并尝试创建标记。首先它扫描 i、n、t,然后当它到达空间时它停止,因为它会将空间视为分隔符。它根据其内部列表检查值“int”并生成适当的令牌。

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

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

这就是为什么你有像 10L 或 10f 这样的东西来表明你正在创建一个 long 或 float 值。否则编译器无法分辨。

http://en.wikipedia.org/wiki/Lexical_analysis http://en.wikibooks.org/wiki/Compiler_construction

或者甚至https://www.coursera.org/course/compilers

【讨论】:

  • 感谢 AnthonyM。我浏览了这些网站,但仍然找不到答案。
猜你喜欢
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 2018-11-16
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多