{"id":20041804,"url":"https://github.com/zenor0/compiler-labs","last_synced_at":"2025-05-05T08:32:24.508Z","repository":{"id":230342823,"uuid":"778621604","full_name":"zenor0/compiler-labs","owner":"zenor0","description":"Fuzhou University 2024 compiler course labs. ","archived":false,"fork":false,"pushed_at":"2024-06-22T01:45:04.000Z","size":1575,"stargazers_count":1,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-08T19:48:25.430Z","etag":null,"topics":["2024","analysis","compiler","course-labs","fzu","grammar","lab","lexer","parse","parser","python","semantic"],"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/zenor0.png","metadata":{"files":{"readme":"README-zhcn.md","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":"2024-03-28T04:15:22.000Z","updated_at":"2024-06-22T01:45:07.000Z","dependencies_parsed_at":"2024-05-17T04:23:29.462Z","dependency_job_id":"e24c04c0-e268-4b6b-8bf4-11704eaae107","html_url":"https://github.com/zenor0/compiler-labs","commit_stats":null,"previous_names":["zenor0/compiler-labs"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenor0%2Fcompiler-labs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenor0%2Fcompiler-labs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenor0%2Fcompiler-labs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zenor0%2Fcompiler-labs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zenor0","download_url":"https://codeload.github.com/zenor0/compiler-labs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252466844,"owners_count":21752448,"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":["2024","analysis","compiler","course-labs","fzu","grammar","lab","lexer","parse","parser","python","semantic"],"created_at":"2024-11-13T10:47:51.963Z","updated_at":"2025-05-05T08:32:23.323Z","avatar_url":"https://github.com/zenor0.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 编译原理实验仓库\n\n[![Python](https://img.shields.io/badge/python-3.10.12-blue.svg)](https://www.python.org/downloads/release/python-31012/)\n[![WSL2](https://img.shields.io/badge/WSL2-Ubuntu_22.04-orange.svg)](https://docs.microsoft.com/en-us/windows/wsl/install)\n[![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)\n\n[English](./README.md) | [中文](./README-zhcn.md)\n\n## 概览\n\n本仓库用于存放福州大学编译原理的实验代码.\n\n实验包括\n\n| 实验序号 | 标题     | 内容                                                 |\n| -------- | -------- | ---------------------------------------------------- |\n| 1        | 词法分析 | 读入源程序，识别单词，输出单词符号表                 |\n| 2        | 语法分析 | 根据文法规则，对单词符号表进行语法分析，输出分析结果 |\n| 3        | 语义分析 | 对语法分析结果进行语义分析，输出四元式和三地址码     |\n\n## 特性\n\n1. **词法分析器**\n\n   + 正则表达式分析\n   + 输出符号表\n\n2. **语法分析器**\n\n   + 支持自定义文法\n   + 检测语法冲突(二义性)\n   + 可视化\n     + 状态机可视化\n     + 语法分析树可视化\n   + 输出分析结果\n     (包括 FIRST集 和 FOLLOW集, ACTION 表 和 GOTO 表)\n\n3. **语义分析器**\n\n   + 支持自定义含有语义动作的文法\n   + 支持自定义语义动作函数\n   + 支持 Python 语法的文法代码片段\n   + 生成 asm-ish 四元式和三地址码\n  \n## 预览\n\n### 词法分析\n\n![词法分析](./docs/lexer.png)\n\n### 语法分析\n\n![语法分析](./docs/grammar.png)\n\n#### 可视化\n\n![状态机](./docs/dfa.png)\n\n![语法分析树](./docs/parse_tree.png)\n\n\n## 运行项目\n\n本项目基于 Python 3.10 on WSL 开发，请在运行之前安装相关依赖。\n\n### Linux\n\n如果你是Linux用户可以使用以下命令进行环境的配置\n\n```bash\nmake\n```\n\n该命令将会创建一个虚拟环境，并在其中并在其中依赖的安装，请在安装完成后手动的激活虚拟环境。\n\n### Windows\n\n\u003e[!WARNING]\n\u003e （项目未在 Windows 上进行测试，可能存在未知 BUG。）\n\n如果你是Windows用户，且系统中有 `make` 命令，可以使用以下命令进行环境的配置\n\n```bash\nmake\n```\n\n如果没有 `make` 命令，你可以手动执行以下命令\n\n1. 安装虚拟环境\n\n    ```bash\n    python -m venv venv\n    ```\n\n2. 激活虚拟环境\n\n3. 安装依赖\n\n    ```bash\n    pip install -e .\n    ```\n\n\n## 使用方法\n\n在各个实验文件夹下有详细的使用方法，请查看对应的 README.md 文件。\n\n你可以运行\n\n```bash\nmake demo\n```\n\n\n来运行每个实验提供的演示.\n\n\u003e [!WARNING]\n\u003e 在 Windows 系统下, `touch` `mkdir` 等命令可能无法使用, 请根据实际情况手动创建文件夹和文件.\n\n\n### 词法分析\n\n运行 `make demo` 后, 会启动程序监听 `./tmp/input` 下的源代码文件, 并将词法分析结果输出到 `./outputs` 下.\n\n`input` 为输入文件, `.out` 为输出文件, `.sym` 为符号表文件.\n\n\n![词法分析](./docs/lexer.png)\n\n### 语法分析\n\n运行 `make demo` 后, 程序会读入 `./data/grammar1.txt` 文件, 输入 Token 流为 `b a a b` 使用 `LR(1)` 模型分析并输出语法分析结果到 `./outputs` 下.\n\n![语法分析](./docs/grammar.png)\n\n同时还会生成状态机和语法分析树的可视化结果。以可交互式网页的形式保存在 `./outputs` 下。\n\n#### 可视化\n\n这是状态机的可视化结果\n\n![状态机](./docs/dfa.png)\n\n这是语法分析树的可视化结果\n\n![语法分析树](./docs/parse_tree.png)\n\n其中, 分析树中会使用不同的颜色来区分不同类型的符号。\n\n### 语义分析\n\n运行 `make demo` 后, 程序会监控 `./tmp/input` 和 `./tmp/grammar.txt` 文件, 并将语义分析结果输出到 `./outputs` 下.\n\n![语义分析](./docs/semantic.png)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzenor0%2Fcompiler-labs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzenor0%2Fcompiler-labs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzenor0%2Fcompiler-labs/lists"}