{"id":22924384,"url":"https://github.com/lawndoc/flair","last_synced_at":"2025-07-20T19:33:28.500Z","repository":{"id":110805258,"uuid":"147600543","full_name":"lawndoc/flair","owner":"lawndoc","description":"Repository for our Compilers class project.","archived":false,"fork":false,"pushed_at":"2018-12-13T18:40:57.000Z","size":1772,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-13T15:08:42.123Z","etag":null,"topics":["compiler","compiler-design","compilers","programming-language"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lawndoc.png","metadata":{"files":{"readme":"README.txt","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-09-06T01:31:05.000Z","updated_at":"2023-01-20T20:53:31.000Z","dependencies_parsed_at":null,"dependency_job_id":"908b68c4-014a-4eb0-b34b-b87a36e8b1ab","html_url":"https://github.com/lawndoc/flair","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lawndoc/flair","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lawndoc%2Fflair","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lawndoc%2Fflair/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lawndoc%2Fflair/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lawndoc%2Fflair/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lawndoc","download_url":"https://codeload.github.com/lawndoc/flair/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lawndoc%2Fflair/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266187251,"owners_count":23889948,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["compiler","compiler-design","compilers","programming-language"],"created_at":"2024-12-14T08:28:52.158Z","updated_at":"2025-07-20T19:33:28.443Z","avatar_url":"https://github.com/lawndoc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Malwareswaldo: C.J. May, Nick Sanford\n\nNew to Project 7:\n    - Fixed various issues with code generator. Now implements everything\n        except for those noted below.\n    - Created test programs to test features of the flair language.\n\nKnown Bugs:\n    - Status stack pointer implementation is hard-coded in each function that is\n        generated because it is handled by Python instead of TM.\n\nFeatures Not Implemented:\n    - Compiler doesn't track which line of code an error occurred on.\n    - Can't pass a function call as an argument to another function call.\n\nOptimizations:\n    - Scanner: We combined multiple states when possibly reading a word reserved\n        by the flair language. We did this by keeping a list of remaining\n        letters and popping off letters from that list as they were read. This\n        reduces the number of if/elif checks and the length of the overall\n        scanner file.\n    - Analyzer: The analyze function for the AST nodes annotates node types and\n        builds the symbol table simultaneously. This way the AST only needs to be\n        traversed once for analysis, and each node is only visited once (except\n        for function nodes while building the initial symbol table).\n\nHow To Run:\n    To test the scanner, use one of these three ways:\n        - call flairs from the command line, passing in an argument for a flair\n            program (ex. $ flairs /path/to/program.flr )\n        - call scantest.py from from the command line, passing in an argument\n            for a flair program (ex. $ scantest.py /path/to/program.flr )\n        - call scantest.py with python3 from the command line, passing in an\n            argument for a flair program\n            (ex. python3 scantest.py /path/to/program.flr )\n\n    To test the validity of a program with the parser, use one of these three ways:\n        - call flairf from the command line, passing in an argument for a flair\n            program (ex. $ flairf /path/to/program.flr )\n        - call parsetest.py from from the command line, passing in an argument\n            for a flair program (ex. $ parsetest.py /path/to/program.flr )\n        - call parsetest.py with python3 from the command line, passing in an\n            argument for a flair program\n            (ex. python3 parsetest.py /path/to/program.flr )\n\n    To test the AST of a program with the parser, use one of these three ways:\n        - call flairp from the command line, passing in an argument for a flair\n            program (ex. $ flairp /path/to/program.flr )\n        - call parsetest_ast.py from from the command line, passing in an argument\n            for a flair program (ex. $ parsetest_ast.py /path/to/program.flr )\n        - call parsetest_ast.py with python3 from the command line, passing in an\n            argument for a flair program\n            (ex. python3 parsetest_ast.py /path/to/program.flr )\n\n    To do semantic analysis on a program with the analyzer, use one of these three ways:\n        - call flairv from the command line, passing in an argument for a flair\n            program (ex. $ flairv /path/to/program.flr )\n        - call analyzertest.py from from the command line, passing in an argument\n            for a flair program (ex. $ analyzertest.py /path/to/program.flr )\n        - call analyzertest.py with python3 from the command line, passing in an\n            argument for a flair program\n            (ex. python3 analyzertest.py /path/to/program.flr )\n\n    To compile a program with the generator, use one of these three ways:\n        - call flairc from the command line, passing in an argument for a flair\n            program (ex. $ flairc /path/to/program.flr )\n        - call generatortest.py from from the command line, passing in an argument\n            for a flair program (ex. $ generatortest.py /path/to/program.flr )\n        - call generatortest.py with python3 from the command line, passing in an\n            argument for a flair program\n            (ex. python3 generatortest.py /path/to/program.flr )\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flawndoc%2Fflair","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flawndoc%2Fflair","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flawndoc%2Fflair/lists"}