当我编译时会发生什么?

2023-12-23

我想知道什么是编译,编译时会发生什么?我的意思是,是的,您按编译或在控制台中输入,但它在“后台”实际上做了什么?


  1. 一、编译器"lexes" http://en.wikipedia.org/wiki/Lexical_analysis来源。这意味着它将源转换为一系列“令牌”。标记是对编译器有意义的字母、数字和符号的序列。

  2. 接下来,编译器"parses" http://en.wikipedia.org/wiki/Parsing第一步中的标记序列。这意味着编译器会检查以确保源代码符合规则(grammar http://en.wikipedia.org/wiki/Formal_grammar)的编程语言。

  3. 接下来,编译器执行句法分析 http://en.wikipedia.org/wiki/Syntax_analysis创建源的表示以确定源的语义。这是编译器将构建一个语法树 http://en.wikipedia.org/wiki/Parse_tree.

  4. 最后,编译器将generate http://en.wikipedia.org/wiki/Code_generation_%28compiler%29捕获目标表示中源的语义的输出(可以是机器代码、中间语言,例如微软的CIL http://en.wikipedia.org/wiki/Common_Intermediate_Language,或其他编程语言)。

有关简要详细信息,请参阅维基百科 http://en.wikipedia.org/wiki/Compiler。对于血淋淋的细节,请参阅龙之书 http://dragonbook.stanford.edu/(每个计算机科学专业的学生都应该学习这本书)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当我编译时会发生什么? 的相关文章

  • 函数内的静态变量如何工作?

    在下面的代码中 int count static int n 5 n n 1 return n 变量n仅在第一次调用该函数时实例化一次 应该有一个标志或其他东西 所以它只初始化变量一次 我试图查看 gcc 生成的汇编代码 但没有任何线索 编
  • 最好的 C++ 编译器是哪个? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 实现词法分析器时,DFA 与正则表达式?

    我刚刚学习如何编写编译器 所以如果我有任何错误的说法 请纠正我 当人们可以简单地使用正则表达式时 为什么还要在代码中实现 DFA goto 语句 表驱动实现 据我了解 词法分析器接收一串字符并生成一个标记列表 这些标记在语言的语法定义中是终
  • 如何在命令行中使用 Visual Studio 编译 x64 代码?

    我想使用 Windows 命令行编译一个简单的 hello world 风格的程序 cl file name c 很容易 现在我想在 64 位中做同样的事情 我应该怎么办 您需要使用发出 x64 代码的 cl exe 编译器版本 哪一个有点
  • C# 编译器如何决定发出可重定向的程序集引用?

    NET Compact Framework 引入了可重定向程序集引用 现在用于支持可移植类库 基本上 编译器会发出以下 MSIL assembly extern retargetable mscorlib publickeytoken 7C
  • Visual Studio 空引用警告 - 为什么没有错误?

    我注意到 Visual Studio 的一些特殊之处 首先 尝试在函数中的某个位置键入以下内容 C class Foo public void Bar string s int i s Length 现在 它会立即标记s in s Leng
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • 当参数类型不明确时,编译器如何选择调用哪个方法?

    我有以下代码 TestMethod public void TestFoo Foo null private void Foo object bar Console WriteLine Foo object private void Foo
  • 似乎有时 Delphi 是区分大小写的 - “覆盖方法应该与祖先的大小写匹配”

    今天我遇到了一个 奇怪 的提示 覆盖方法 xxxx 应匹配祖先 yyyy 的大小写 解决方案是完全按照祖先中的方式声明方法名称 我相信这是自 Delphi Net 编译器以来编译器中保留的东西 与祖先中完全相同的方法声明方法使编译器 沉默
  • C# 中的 C/C++ 代码编译器

    在 C 中 我可以使用下面的代码编译 VB 和 C 代码 但无法编译 C C 代码 有什么办法可以做到这一点吗 C 编译器 public void Compile string ToCompile string Result null st
  • 了解C/C++中函数调用的堆栈框架? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我也是 C C 和汇编语言的新手 这
  • 当 C# 位于同一包含类中时,为什么以及如何允许访问类本身之外的私有变量?

    我不知道这个问题是否具有足够的描述性 但是这种行为为什么以及如何存在 public class Layer public string Name get set private IEnumerable children public IEn
  • BISON + FLEX 语法 - 为什么标记被连接在一起

    我想了解为什么 BISON 按照以下规则连接两个标记 stmt declaration assignment exp ID lt this rule fprintf stderr n my id is s 1 如果你检查输出就会明白我的意思
  • C# 编译器编译 .txt .obj .java 文件

    using System class Program public static void Main Console WriteLine Hello World Console ReadLine 我将文件另存为1 java 2 obj an
  • 使用 PHP 自动将引用的 LESS 文件编译为 CSS

    我希望发生以下事情 让流程在服务器端自动化 只需能够像在代码中引用 CSS 文件一样引用 LESS 文件 用户将返回缩小的 CSS 而不是缓存的 LESS 文件 因此编译器不需要运行 除非 LESS 文件已更新 为了这个工作any在我的域内
  • MSVC 可能/不太可能等效

    GCC 编译器支持 builtin expect 语句 用于定义可能和不可能的宏 eg define likely expr builtin expect expr 1 define unlikely expr builtin expect
  • 如何为 iPhone 构建静态库?

    我想我已经到处寻找问题的答案 但没有运气 我正在尝试创建一个简单的静态库来在 iPhone 设备上运行 但我总是以 XCode 结束 说 文件不属于必需的架构 并且我已经尝试了我发现的每个构建标志 但没有任何运气 我已经让它在模拟器上工作了
  • 有没有办法在 OSX 中安装 gcc 而无需安装 Xcode?

    我用谷歌搜索了一下 似乎没有办法在 OS X 上安装 gcc 而不安装 Xcode 至少需要 1 5GB 的空间 我需要的只是 gcc 而不是 Xcode 附带的其他垃圾 此时 我将采用任何其他类型的 C 编译器 我知道我可以简单地安装 X
  • 调用 printf 系统子例程在汇编代码中输出整数错误[重复]

    这个问题在这里已经有答案了 来回 在windows7控制台窗口中运行gcc s2 asm 然后生成一个exe文件 运行a exe 然后崩溃 为什么 s2 asm 代码由以下源代码生成 int m m 1 iprint m s2 asm请参考
  • 如果内存是字节可寻址的,为什么我们需要对齐填充?

    既然我们可以单独寻址内存的每个字节 为什么编译器要格外小心以确保结构及其成员与内存中的 32 位边界对齐 我在这里可能是错的 但是在 32 位系统上 从 0x0800 开始获取 4 个字节是不是和从 0x0801 开始获取 4 个字节一样快

随机推荐

  • 快速将 Excel 导入数据表

    我正在尝试将 Excel 文件读入 Data DataTable 列表中 尽管使用我当前的方法可能需要很长时间 我基本上是逐个工作表 逐个单元地进行操作 这往往需要很长时间 有没有更快的方法来做到这一点 这是我的代码 List
  • 如何禁用/隐藏 vscode-python 中的变量分组

    最近的 ms python 扩展 v2020 5 86806 https github com microsoft vscode python releases tag 2020 5 86806 for vscode 在调试控制台 变量资源
  • 部署到生产时找不到索引视图?

    尝试将 MVC 应用程序部署为现有 ASP NET 3 5 应用程序 非 MVC 的子应用程序时 我遇到了问题 错误是 The view index or its master could not be found The followin
  • 如何阻止 WPF KeyDown 事件从某些包含的控件(例如 TextBox)中冒泡?

    我的程序非常大 并且使用 WPF 我想要一个使用 R 的全局快捷键 不带修饰符 有许多控件 例如 TextBox ListBox ComboBox 等 它们都在控件本身内部使用字母 这很好 这对我来说是正确的 But 我想阻止 KeyDow
  • 如何在一个proc打印语句中打印多个数据集?

    我有一个 sas 查询 如果我创建了 3 个数据集 可以说命名为ds1 ds2 ds3 现在 我想在一个 proc print 语句下打印所有这些 那么我们该怎么做呢 就像 我想要这样的东西 proc print data work ds1
  • 在 GPU 上计算图像相似度 [OpenGL/遮挡查询]

    OpenGL 假设我绘制了一幅图像 然后使用 XOR 绘制了第二幅图像 现在我在某处有了带有非黑色像素的黑色缓冲区 我读到可以使用着色器来计算 GPU 上的黑色 rgb 0 0 0 像素 我还读到它必须与 OcclusionQuery 做一
  • 在自定义静态框架 iOS 中使用 magicrecords 库

    我一直在为 iOS 实现一个自定义静态框架 一切都运行良好 但现在我意识到我需要通过框架中的 coredata 存储信息 我一直在之前的项目中使用 magicrecord 库 我想知道是否有人有将 magicrecord 集成到您自己的自定
  • 获取 LinkedHashSet 的最后一个

    我想存储数字 1 2 3 4 的列表 让我们从List
  • Proguard 保留接口方法参数名称

    我使用 keepparameternames 但它不响应界面 The interface s methond parameter is proguard Thank you for your help Proguard 可以很好地保留参数名
  • LISTAGG 奇怪的串联[重复]

    这个问题在这里已经有答案了 当我使用下面的查询来获取所需的详细信息时 SELECT USERNAME FULLNAME DEPARTMENT LISTAGG TASKNAME WITHIN GROUP ORDER BY TASKNAME T
  • 如何在 Xamarin 中获取 GoogleApiClient?

    我想实现类似的东西this https stackoverflow com a 25173057 2611340在我在 Xamarin 中开发的 Android 应用程序中 但找不到其中的命名空间GoogleApiClient是 有人可以帮
  • Blackberry OS 4.5 应用程序的通知服务

    我正在开发一个类似于电子邮件应用程序的应用程序 每当收到新消息时 我的通知服务应通过更新图标向用户指示更改 此外 通知服务应持续侦听服务器的传入事件 我正在使用 4 5 版本的操作系统进行开发 RIM OS 您有多种选择来通知 用户 都不是
  • 如何将 Google 地图标记链接到其他元素?

    使用谷歌地图 http code google com apis maps documentation reference html 和 JavaScript 我已经能够轻松地显示几个标记 每个标记上都有一个漂亮的小信息窗口 Create
  • 关闭 Cypress 中的 Angular 材质对话框

    我正在将 Cypress 添加到我的 Angular 6 项目中 并使用 Angular Material 欢迎新用户使用材质对话框 其中包含 iFrame 并且通过单击对话框外部来关闭该对话框 我尝试通过多种方式在 Cypress 中关闭
  • ng2-charts 更新标签和数据

    我正在尝试使用 ng2 chart 动态创建图表 我从 Angular 2 服务获取信息 当我仅更改图表标签时 它有效 当我更改数据时 它仅有效 但是当我更改两者时 仅数据在图表中更新 有人可以解释一下这种奇怪的行为吗 我的模板
  • 连接关闭后 Socat 终止

    此命令 串行端口重定向器 接受 TCP 11313 上的单个连接 socat PTY link dev ttyV1 echo 0 raw unlink close 0 TCP LISTEN 11313 forever reuseaddr 但
  • AngularJS ui-router,滚动到状态更改的下一步

    我在我的应用程序中使用 UI router 当 URL 状态更改时 我想使用一个简单的 scrollTo 到锚点 我不想从模板加载下一步 或加载新的控制器 我只是希望页面上已经有几个 div 并在它们之间上下滚动 HTML 的简化视图如下所
  • `if __name__ == '__main__'` 在 javascript es6 模块中等效

    是否可以检查 JavaScript 文件是否直接运行 或者是否需要作为 es6 模块导入的一部分 例如 包含一个主脚本 main js import other if mainTest console log This should run
  • Python 日志记录:将属于一个请求的日志分组

    有没有一种方法可以对属于一个 Web 请求的 Python Web 应用程序的日志进行分组 Example 2015 02 11 13 06 32 myapp middleware MYAPPMiddleware INFO Login of
  • 当我编译时会发生什么?

    我想知道什么是编译 编译时会发生什么 我的意思是 是的 您按编译或在控制台中输入 但它在 后台 实际上做了什么 一 编译器 lexes http en wikipedia org wiki Lexical analysis来源 这意味着它将