Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zenor0/compiler-labs
Fuzhou University 2024 compiler course labs.
https://github.com/zenor0/compiler-labs
2024 analysis compiler course-labs fzu grammar lab lexer parse parser python semantic
Last synced: 3 months ago
JSON representation
Fuzhou University 2024 compiler course labs.
- Host: GitHub
- URL: https://github.com/zenor0/compiler-labs
- Owner: zenor0
- Created: 2024-03-28T04:15:22.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-06-22T01:45:04.000Z (8 months ago)
- Last Synced: 2024-06-23T09:26:11.839Z (8 months ago)
- Topics: 2024, analysis, compiler, course-labs, fzu, grammar, lab, lexer, parse, parser, python, semantic
- Language: Python
- Homepage:
- Size: 1.5 MB
- Stars: 1
- Watchers: 1
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README-zhcn.md
Awesome Lists containing this project
README
# 编译原理实验仓库
[![Python](https://img.shields.io/badge/python-3.10.12-blue.svg)](https://www.python.org/downloads/release/python-31012/)
[![WSL2](https://img.shields.io/badge/WSL2-Ubuntu_22.04-orange.svg)](https://docs.microsoft.com/en-us/windows/wsl/install)
[![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)[English](./README.md) | [中文](./README-zhcn.md)
## 概览
本仓库用于存放福州大学编译原理的实验代码.
实验包括
| 实验序号 | 标题 | 内容 |
| -------- | -------- | ---------------------------------------------------- |
| 1 | 词法分析 | 读入源程序,识别单词,输出单词符号表 |
| 2 | 语法分析 | 根据文法规则,对单词符号表进行语法分析,输出分析结果 |
| 3 | 语义分析 | 对语法分析结果进行语义分析,输出四元式和三地址码 |## 特性
1. **词法分析器**
+ 正则表达式分析
+ 输出符号表2. **语法分析器**
+ 支持自定义文法
+ 检测语法冲突(二义性)
+ 可视化
+ 状态机可视化
+ 语法分析树可视化
+ 输出分析结果
(包括 FIRST集 和 FOLLOW集, ACTION 表 和 GOTO 表)3. **语义分析器**
+ 支持自定义含有语义动作的文法
+ 支持自定义语义动作函数
+ 支持 Python 语法的文法代码片段
+ 生成 asm-ish 四元式和三地址码
## 预览### 词法分析
![词法分析](./docs/lexer.png)
### 语法分析
![语法分析](./docs/grammar.png)
#### 可视化
![状态机](./docs/dfa.png)
![语法分析树](./docs/parse_tree.png)
## 运行项目
本项目基于 Python 3.10 on WSL 开发,请在运行之前安装相关依赖。
### Linux
如果你是Linux用户可以使用以下命令进行环境的配置
```bash
make
```该命令将会创建一个虚拟环境,并在其中并在其中依赖的安装,请在安装完成后手动的激活虚拟环境。
### Windows
>[!WARNING]
> (项目未在 Windows 上进行测试,可能存在未知 BUG。)如果你是Windows用户,且系统中有 `make` 命令,可以使用以下命令进行环境的配置
```bash
make
```如果没有 `make` 命令,你可以手动执行以下命令
1. 安装虚拟环境
```bash
python -m venv venv
```2. 激活虚拟环境
3. 安装依赖
```bash
pip install -e .
```## 使用方法
在各个实验文件夹下有详细的使用方法,请查看对应的 README.md 文件。
你可以运行
```bash
make demo
```来运行每个实验提供的演示.
> [!WARNING]
> 在 Windows 系统下, `touch` `mkdir` 等命令可能无法使用, 请根据实际情况手动创建文件夹和文件.### 词法分析
运行 `make demo` 后, 会启动程序监听 `./tmp/input` 下的源代码文件, 并将词法分析结果输出到 `./outputs` 下.
`input` 为输入文件, `.out` 为输出文件, `.sym` 为符号表文件.
![词法分析](./docs/lexer.png)
### 语法分析
运行 `make demo` 后, 程序会读入 `./data/grammar1.txt` 文件, 输入 Token 流为 `b a a b` 使用 `LR(1)` 模型分析并输出语法分析结果到 `./outputs` 下.
![语法分析](./docs/grammar.png)
同时还会生成状态机和语法分析树的可视化结果。以可交互式网页的形式保存在 `./outputs` 下。
#### 可视化
这是状态机的可视化结果
![状态机](./docs/dfa.png)
这是语法分析树的可视化结果
![语法分析树](./docs/parse_tree.png)
其中, 分析树中会使用不同的颜色来区分不同类型的符号。
### 语义分析
运行 `make demo` 后, 程序会监控 `./tmp/input` 和 `./tmp/grammar.txt` 文件, 并将语义分析结果输出到 `./outputs` 下.
![语义分析](./docs/semantic.png)