Parsing 构建IDE/编译器所需的概念

Parsing 构建IDE/编译器所需的概念,parsing,compiler-construction,ide,Parsing,Compiler Construction,Ide,在制作IDE(例如SharpDevelop)或编译器/语言解析器时,我需要了解哪些计算机科学主题?我不希望有一个完整的深入教程列表,而只是一个有助于我提高的主题列表 我认为解析器有一些关于语言语法/语义的规则,并根据这些规则验证代码,对吗?这似乎是一个简单的方法 感谢您实现编译器/语言,您需要对以下方面有基本的了解: &-上下文无关语法(语法规则) 词汇分析技术与工具(Lex/Bison) 解析技术(例如递归、LL、LR) 如果你在编写编译器,一门好的语言翻译理论或类似的计算机科学课程是非常必

在制作IDE(例如SharpDevelop)或编译器/语言解析器时,我需要了解哪些计算机科学主题?我不希望有一个完整的深入教程列表,而只是一个有助于我提高的主题列表

我认为解析器有一些关于语言语法/语义的规则,并根据这些规则验证代码,对吗?这似乎是一个简单的方法


感谢您实现编译器/语言,您需要对以下方面有基本的了解:

  • &-上下文无关语法(语法规则)
  • 词汇分析技术与工具(Lex/Bison)
  • 解析技术(例如递归、LL、LR)

    • 如果你在编写编译器,一门好的语言翻译理论或类似的计算机科学课程是非常必要的。麻省理工学院开放式课程提供了一个类似于这些内容的课程。这应该教会你mmattax提到的概念,并提供一个良好的开端

      至于IDE,它实际上更像是一个桌面应用程序项目。您可能正在从IDE调用编译器,但实际上并不是在编译代码(不过,公平地说,在复杂的IDE中,您可能正在解析代码)。因此,构建调用外部编译器/链接器的IDE所需的知识将更多地集中在您所使用的任何平台的UI工具包上,如果您想解析代码,可能还需要一些编译器前端理论(如您在编译器课程中所学)。

      对不起,答案是“整个计算机科学和多年的实践经验”

      这对普通人来说太大了,eclipse、intellij、netbeans和Visual……都已经很好地涵盖了这一主题


      看看更小、更容易实现的东西,比如eclipse插件,你会感兴趣的东西。

      IDE、编译器和调试器是三种不同的东西

      下面是一些我在考虑为模拟语言构建建模工具时发现的有趣或鼓舞人心的链接的快速随机选择,这些链接离IDE很近:

      • -可编程信息,而不是交互
      • -想象一下,如果你的工作生涯都是为了寻找让这一切变得美好的信息
      • (Bracha还设计了Java的调试镜像接口,这也是IDE所需要的)
      • -GUI的一般示例
      • (尽管当每一页代码看起来都一样时,图标也没有多大用处;可能生成的图标与这里的图标一样可以工作)
      • -如果表达代码的最佳方式是挥挥手,或者严厉地批评一个bug,该怎么办
      • -类似于Bracha的文章,关于修补运行框架

      这些链接中有些偏向于帮助阅读和浏览而不是编写代码的模式,偏向于用户在使用它们时扩展的系统,而不是作为一个单独的周期;如果您想要一个面向任务的界面或静态插件,那么现有IDE(如Eclipse)的项目就是可以查看的地方。

      编写编译器翻译与翻译:软件工程方法[平装本] Ronald Mak->这是一本很好的入门书。它将引导您完成使用调试器构建编译器和ide的整个过程,以及许多其他您需要的东西。在本书的结尾,您将很好地了解如何独立进行分支


      您可能还想看看PragProg.com publishing的语言实现模式。

      为了开发编译器,您需要掌握以下主题

      • 有限自动机(DFA)
      • 上下文无关语法(您需要在开始编码之前定义语法,这是您的语言/编译器的蓝图)
      完成理论部分后,您需要为编译器开发以下组件

    • 词法分析器(为您的语言验证标记)
    • 解析器(验证您的语言的句子)
    • 翻译方案(将您的代码(高级)转换为3个地址代码(机器语言代码))
    • 虚拟机(代码生成/生成代码的实际输出)
    • 注意:每个组件的输出是下一个组件的输入,词法分析器的输入是您的实际代码
      大多数编译器是使用形式化方法(过程设计模式)开发的

      为什么会被降级?+1因为我同意eclipse的观点,即悲观主义和沮丧。没有人知道整个计算机科学,而且大部分都是在编写第一批编译器之后才存在的。阻止某人尝试对个人来说太大的任务不是一件坏事。所需技能范围:GUI设计、语法解析、构建依赖关系、源代码控制等可能只是一个单独的程序员可以做到的,但不是一个需要提问的程序员。