The compiler writer can use a number of software development tools. the compiler writer like any programmer can use software tools such as a debugger, version managers, profilers, and so on. In addition, there are specialized tools that have been developed for helping in Writing various phases of a compiler. These tools are referred to as compiler-compilers, compiler-generators, or translator-writing systems. Generally, these tools are oriented around a particular language model and are most suitable for generating compilers for the languages similar to that mode of the languages.
Some general tools have been created for the automatic design of specific compiler components. These tools make use of specialized languages for specification and implementation of a component and use many sophisticated algorithms. The most successful tools hide the details of the generation algorithm and produce components that can be easily interested into the remainder of the compiler. The principal tools useful for compiler construction are described below :
1 Scanner generators (Lexical analyzer generator) are used to automatically generate lexical analyzers from the specifications based on regular expressions. For example, LEX is a lexical analyzer generator available on UNIX. The basic organization of the resulting lexical analyzer is finite automation.
2. Parser generators are used to generate the syntax analyzers from the input that is based on context-free grammar (CFG). For example, YACC is an LALR parser generator available as a command on the Unix system. YACC stands for ‘Yet Another Compiler-Compiler’. One significant advantage of using a parser generator is increased reliability. A mechanically-generated parser is more likely to be correct than one produced by hand.
3. Syntax-directed translation engines are used to produce the collections of routines that traverse the parse tree which generate intermediate code.
4. Automatic code generators are used to generate the machine language for the target machine by translating each operation of the intermediate language using a collection of rules that define those translations.
5. Data-flow engines are used to perform the data-flow analysis needed to perform good code optimization. The data flow analysis involves the gathering of information about how values are transmitted from one part of a program to each other part.