|
A compiler generally starts with a front end that handles the language syntax and some of the language semantics.
string | → | lexer | → |
sequence of tokens |
→ | semantic parser | → |
compiler output |
Some compilers generate code during the parsing process. (So the semantic part of the semantic parser is the code generation.)
More commonly, the compiler generates intermediate code that is processed by a intermediate code analyzer and improver and a back end that generates the final code.
sem. parser | → |
intermediate code |
||
→ | analysis/improvement | → |
intermediate code |
|
→ | code generator | → | final output |
Another common strategy is for the semantic parser to generate abstract syntax trees, which describe the structure of a section of a program. This gives the compiler writer more flexibility to handle difficult constructs.
sem. parser | → | ASTs | → | intermed. code gen. | → |
intermediate code |
→ | … |
A compiler can produce abstract syntax trees and send them directly to an interpreter, which processes them. In this scheme, no code is generated. This is what your project will do.
sem. parser | → | ASTs | → | interpreter |
|