-
Notifications
You must be signed in to change notification settings - Fork 0
lawndoc/flair
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Malwareswaldo: C.J. May, Nick Sanford New to Project 7: - Fixed various issues with code generator. Now implements everything except for those noted below. - Created test programs to test features of the flair language. Known Bugs: - Status stack pointer implementation is hard-coded in each function that is generated because it is handled by Python instead of TM. Features Not Implemented: - Compiler doesn't track which line of code an error occurred on. - Can't pass a function call as an argument to another function call. Optimizations: - Scanner: We combined multiple states when possibly reading a word reserved by the flair language. We did this by keeping a list of remaining letters and popping off letters from that list as they were read. This reduces the number of if/elif checks and the length of the overall scanner file. - Analyzer: The analyze function for the AST nodes annotates node types and builds the symbol table simultaneously. This way the AST only needs to be traversed once for analysis, and each node is only visited once (except for function nodes while building the initial symbol table). How To Run: To test the scanner, use one of these three ways: - call flairs from the command line, passing in an argument for a flair program (ex. $ flairs /path/to/program.flr ) - call scantest.py from from the command line, passing in an argument for a flair program (ex. $ scantest.py /path/to/program.flr ) - call scantest.py with python3 from the command line, passing in an argument for a flair program (ex. python3 scantest.py /path/to/program.flr ) To test the validity of a program with the parser, use one of these three ways: - call flairf from the command line, passing in an argument for a flair program (ex. $ flairf /path/to/program.flr ) - call parsetest.py from from the command line, passing in an argument for a flair program (ex. $ parsetest.py /path/to/program.flr ) - call parsetest.py with python3 from the command line, passing in an argument for a flair program (ex. python3 parsetest.py /path/to/program.flr ) To test the AST of a program with the parser, use one of these three ways: - call flairp from the command line, passing in an argument for a flair program (ex. $ flairp /path/to/program.flr ) - call parsetest_ast.py from from the command line, passing in an argument for a flair program (ex. $ parsetest_ast.py /path/to/program.flr ) - call parsetest_ast.py with python3 from the command line, passing in an argument for a flair program (ex. python3 parsetest_ast.py /path/to/program.flr ) To do semantic analysis on a program with the analyzer, use one of these three ways: - call flairv from the command line, passing in an argument for a flair program (ex. $ flairv /path/to/program.flr ) - call analyzertest.py from from the command line, passing in an argument for a flair program (ex. $ analyzertest.py /path/to/program.flr ) - call analyzertest.py with python3 from the command line, passing in an argument for a flair program (ex. python3 analyzertest.py /path/to/program.flr ) To compile a program with the generator, use one of these three ways: - call flairc from the command line, passing in an argument for a flair program (ex. $ flairc /path/to/program.flr ) - call generatortest.py from from the command line, passing in an argument for a flair program (ex. $ generatortest.py /path/to/program.flr ) - call generatortest.py with python3 from the command line, passing in an argument for a flair program (ex. python3 generatortest.py /path/to/program.flr )
About
Repository for our Compilers class project.