Careers > Improve unparsing for the Libadalang Ada language analysis library
Last modified 10/20/2020 8:30:48 AM

Improve unparsing for the Libadalang Ada language analysis library

Internship
AdaCore
Paris, France
Bac +4/5

Everything we do at AdaCore is centered around helping developers build safe, secure and reliable software.

For over 25 years, we've worked with global leaders across the military and civil avionics, defense systems, air traffic management/control, space, railway, and financial services industries, building tools and providing services that ease the complex and difficult process of developing high-integrity software. As the need for truly secure and reliable applications expands into industries such as automotive, medical, energy, and IOT, we’re advancing our time-tested technologies to bring expertise and services to help a whole new generation of developers. Through our subscription-based business model and dedicated services arm, we have worked with hundreds of customers over the year on thousands of projects.

Our 120 experts worldwide in the US (New York, Lexington), France (Paris, Toulouse, Grenoble and Vannes), the UK, and Estonia, all play a role in developing state-of-the-art technologies to meet the challenges of building the highest grade of software.

Joining AdaCore is about joining a culture of innovation, openness, collaboration and dependability, which defines how we work together, with our customers and partners.

Improve unparsing for the Libadalang Ada language analysis library

 

Context

Libadalang [1] is a syntactic and semantic engine for the Ada language. It is able to parse (convert from text to tree) and unparse (convert from tree to text) Ada code. [3]

With the addition of an API to mutate the Libadalang generated trees, this allows one to express passes that will modify Ada code structurally, and allow the generation of the resulting source.

Goals

The intern’s job would be to enhance this unparsing mechanism so that it is able to preserve comments and general formatting of the source as well as possible. This in turn would be used to express refactorings in a source preserving and syntactically correct manner, by construction.

Additionally, the intern would have to design a rule based system to specify the code style of the client (number of lines between statements, comments, etc), and improve the unparsing system to respect those constraints.

Validation of the above goals would be acquired through the writing of a set of rules for the AdaCore coding style, and unparsing of a set of canonical source files.

As an additional stretch goal: Libadalang is based upon Langkit [2], an engine for specifying code analysis engines from grammar and specification of the language semantics. The above work could then easily be applied to another language with a langkit front-end (for the moment, Python, and a few other DSLs that AdaCore has).

Skills required/nice to have:

  • Experience/interest in compilers, parsing, syntactic & semantic analysis

  • No specific language experience required

Timeframe

During 2021 - 6 months - Paris Office

[1] https://github.com/AdaCore/libadalang
[2] https://github.com/AdaCore/langkit [3] https://en.wikipedia.org/wiki/Unparser

Powered by Hello Talent