Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Concepts required in building an IDE/compiler [closed]

When it comes to making an IDE (e.g. SharpDevelop) or a compiler/language parser, what topics of computer science do I need to know? I don't expect a full list of in depth tutorials but just a list of topics which would benefit me in improving.

Am I right in thinking a parser has some rules about the syntax/semantics of a language, and validates the code based on these rules? That seems like a simple approach?

Thanks

like image 449
GurdeepS Avatar asked Jan 21 '09 16:01

GurdeepS


People also ask

How an IDE is created?

Most IDEs are created by large professional teams (e.g. Microsoft Visual Studio, JetBrains IntelliJ) or by a group of Open Source developers (e.g. Eclipse). Knowing this why would you want to build an IDE? Especially as it has been done so many times before.

What is the use of IDE in programming?

An IDE allows developers to start programming new applications quickly because multiple utilities don't need to be manually configured and integrated as part of the setup process.

What makes a good IDE?

An IDE must support an array of new and old programming languages. Some IDE makers tailor their tools for a specific programming language or a narrow range of languages. Others support a broader spectrum of languages. The lead developer should pick an IDE that supports their current project's languages.

What is difference between IDE and compiler?

The main difference between IDE and compiler is that the IDE is a software suite that consists of tools required to develop and test software applications while the compiler is a program that translates the source code written in a high-level programming language into a low-level machine code.


2 Answers

An IDE, a compiler and a debugger are three different beasts.

Here's a quick and slightly random selection of some links that I've found interesting or inspiring when thinking about building modeling tools for simulation languages, which is as close as I get to IDE:

  • The High Performance GUI
  • Magic Ink - programmable information rather than interaction
  • Edward Tufte - imagine if your working life was spent looking at information made this beautiful.
  • Dynamic IDEs for Dynamic Languages (Bracha also designed Java's debugging mirror interface, another thing an IDE needs)
  • Information Design Patterns - general examples of GUIs
  • Problems with tabbed interfaces (though icons aren't much use either when each page of code looks the same; maybe generated icons like the ones here would work)
  • Common Sense Suggestions for Developing Multimodal User Interfaces - what if the best way to express your code is to wave your hands around, or give a bug a stern talking to.
  • The Pinocchio Problem - similar are to Bracha's post, about patching a running framework

There's somewhat of a bias in those links towards patterns to help reading and browsing rather than writing code, and towards systems the user extends while using them rather than as a separate cycle; if you want a task-oriented interface or static plugins, projects for existing IDEs such as Eclipse are the place to look.

like image 192
Pete Kirkham Avatar answered Sep 30 '22 09:09

Pete Kirkham


For implementing a compiler / language, you will need a fundamental understanding of:

  • BNF & EBNF - Context-Free Grammers (the syntax rules)
  • Lexical Analyzing Techniques & Tools (Lex / Bison)
  • Parsing Techniques (eg. Recursive Decent, LL, LR)
like image 21
mmattax Avatar answered Sep 30 '22 08:09

mmattax