- Introduction
- Project Documentation
- The Compiler - Lexer
- The Compiler - Parser
- The Compiler - Symbol Table
JenPile is a simple compiler that was built to translate basic programming logic into machine code. It was built in three phases; the Lexical Analyzer, Syntax Analyzer, and Parser. It was created for the Compiler Project for Compilers and Languages, Fall 2020 at CSUF. Detailed descriptions of each part and directions on how to run can be found in the Software Requirements Specification
Software Requirement Specification
Lexer Documentation
Parser Documentation
The first part of the project was to write a lexical analyzer, using a FSM for the entire lexer, or using FSM for
identifier, integer and real numbers. The function lexer, should return a token when it is needed. The lexer should return
a record, one field for the token and another field for the actual value (lexeme) of the token. The main program should read in a file containing the source code given
to generate tokens and write the results to an output file.
The second part of the project is to write a syntax analyzer. It can use any top-down
parser such as a RDP, a predictive recursive descent parser or a table driven
predictive parser. All grammar must be rewritten to remove left recursion.
Arithmetic expressions should be done first, then Assignment and declarations.
The Parser should print to an output file the token, lexeme, and production rules.

The third part of the project consists of Documentation and Specifications for the compiler
project, a symbol table with type checking, and one of the following options:
generating intermediate code from the grammar from the Parser, or implementing a
different approach for the Syntax Analyzer. Due to Coronavirus considerations, the
third assignment was shortened in class to consist of the documentation and
symbol table, with all other parts of the assignment being extra credit.
Documentation should include explaining approach and function, program flow and
diagrams for maximum points.
The Symbol Table should take every identifier declared in the program and place it
in a symbol table. The symbol table should hold the lexeme and a “memory
address” where it can be found. The table should be checked every time an
identifier is declared and return an error message if it is found. The symbol table
should also make sure the type matches.

