Open In App

Source to Source Compiler

Improve
Improve
Like Article
Like
Save
Share
Report

A compiler is a software program that transforms a program or code written in a high-level programming language into a low-level machine-readable language. When we write a program or code which can be in a high-level language, such as C, C++ or such as the one given below.

//Simple Java program
public class simple{ 
  public static void main(String[] args){ 
    System.out.printIn("Hello World")
    }
  }

A high-level language is closer to English, which makes it easier for us to write programs. But we can’t just run the same code onto a computer as machines can’t understand that. All that a computer can understand is binary code, that is ones and zeros. Therefore, the solution to the problem that computers can’t understand high-level languages would be to convert those into machine-understandable binary code. This is the exact task that is done by a compiler.  

The compiling process of the simple ‘hello world’ program up there would be as follows –

  1. We create the ‘hello world’ program and save the file as Hello.java.
  2. When we complete this program, the compiler generates the equivalent machine code and saves it into the class file of the same name but with class extension Hello.class.
  3. And when the program is executed, it is the class file that gets executed and gives the output.

Compiles are of many types, but in this article, we are going to learn about a specific one, that is Source to Source Compiler.

Source To Source Compiler :
A source to source compiler (S2S compiler) is also referred to by three other name, the first is the source to source translator, the second is transcompiler and the third one is transpiler. If we try to summarize the work on the source to source compiler is a sentence, it would be as follows:

A S2S Compiler is given as input the source code of a program to which it returns a source code with the overall same functionality in the same or different programming language. 

Unlike the general compiler whose work is to convert a high-level programming language to a machine language that is binary, the source to source compiler converts one source code from one programming language to another programming language which is at the same level of compilation from machine language. For example, while the traditional compiler may convert C to assembly or Java to bytecode, the source to source compiler may convert one scripting language to another such as Javascript to Python, or C++ to Java

Some examples of traditional compilers are listed below :

Name Source Language Target Language
GCC C++ Binary / Machine Language
Clang C++ Binary / Machine Language
JAVAC Java Byte code
GCJ Java Byte code
ECJ Java  Byte code

Some Examples of Source to Source compilers are listed below :

Name  Source Language Target Language
Cfront C++ C
HPHPc PHP C++
Babel ES^+(JS) ES5
ClojureScript Clojure JavaScript
JSSweet Java TypeScript
Swiftify Objective-C Swift
J2ObjC Java Objective-C
Haxe Haxe

ActionScript3, JavaScript, Java, C++,

C#, PHP, Python, Lua

Maia Maia Verilog
Cerberus X Cerberus JavaScript, Java, C++, C#

One of the main source application of source to source compilers is to convert the old code, that is legacy code, to the newer versions of a programming language or an API which helps in retaining the backward compatibility of the code. Tools come in very handy in updating large and old code bases which otherwise would take too much time to do it manually. An example of it could be converting the program of the older version of C++ to the current stable version that is C++20. Or it could also be the case of an API such as the old Dart program to be converted to the newer Dart 2.0 version. The structure of the newer could is dependent on the compiler. It could either be very similar to the original code to ease the development process from one language to the other or from the older version to the newer. Or the code structure can be completely changed so as to make it look original or different.

If we give a closer look at the table above, we can deduce that the initial use of some of the main programming languages, such as PHP or C++, was started as a source to source compilers, as their main use was to convert to the other mainstream programming languages. Today also, if we take a look around, we can identify languages such as Dart, Typescript, CoffeeScript, ECMAScript and others as being mainly used for the conversion to other languages.

Assembly Language Translator :
Assembly language translators are one of the most important examples of the source to source compiler. Below we have discussed in brief the four assembly language translators.

  • Intel CONV86 – 
    It is one of the first compilers which could translate assembly into the binary. Back in the late 70’s, it was made by Intel, which is famous for making processors. The intended purpose for this was to reliably run the program made for an 8-bit processor onto Intel’s 16-bit processor. As per the users, it being one of the first of its kind, it was not able to perform up to the expectations.
  • SCP TRANS86 – 
    Similar to the Intel CONV86, this translator was developed in 1980 by an engineer named Tim Paterson who is known as the creator of the famous 86-DOS. This translator was designed to translate assembly code from Intel 8080 and Zilog Z80 into .ASM code for Intels 16-bit processor Intel 8086. But similar to its previous counterpart, it was unable to perform the job effectively and required a lot of manual correction.
  • Sorcim TRANS86 –
    Sorcim is a start-up that also offered an assembly translator to the market in 1980. It was also invented to convert assembly to MS-DOS. This translator proved to be a better substitute for the previous two.
  • Digital Research XLT86 – 
    This translator appeared in the market in September of 1981 and was developed by Gary Kildall. Before this translator, no one other had the optimizing compiler approach which provided an effective performance. Like SCP TRANS86, its object was also to convert .ASM source code from Intel 8080 into the .A86 code for Intel 8086.

These four assembly code translators mark the beginning for the source to source compilers, which now had made many folds of progress.


Last Updated : 01 Nov, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads