Skip to content

Northeastern University Compiler Principles Course Lab. This project is the design and implementation of a simple grammar-based compiler frontend

Notifications You must be signed in to change notification settings

10-OASIS-01/Compiler-NEU-2024-

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

东北大学编译原理课程设计 English Version README

运行环境

  • Visual Studio 2022

项目简介

题目内容

本项目是一个简单文法的编译器前端的设计与实现,包括以下功能:

  • 定义一个简单的程序设计语言文法(包括变量说明语句、算术运算表达式、赋值语句;扩展包括逻辑运算表达式、If语句、While语句等)。
  • 词法分析器的设计与实现。
  • 语法分析器的设计与实现。
  • 中间代码设计与生成器的实现。
  • 代码优化的实现。
  • 基于Windows API实现的可视化界面。
  • 基于多寄存器多内存的虚拟机模拟目标指令运行平台。

支持文法

PROGRAM  program id SUB_PROGRAM.
SUB_PROGRAM  VARIABLE COM_SENTENCE
VARIABLE  var ID_SEQUENCE :TYPE ;
ID_SEQUENCE  id {,id}
TYPE  integer | real | char
COM_SENTENCE  begin SEN_SEQUENCE {; SEN_SEQUENCE} end
SEN_SEQUENCE EVA_SENTENCE|COND_SENTENCE|LOOP_SENTENCE|COM_SENTENCE

EVA_SENTENCE  id PUSH(id):= EXPRESSION ASSI(=)     //赋值语句文法
EXPRESSION  TERM{w1 TERM GEQ(w1)}
TERM  FACTOR{w2 FACTOR GEQ(w2)}
FACTOR  id PUSH(id) | cons PUSH(cons) | (EXPRESSION)
//EXPRESSION  EXPRESSION + TERM | TERM
//TERM  TERM *  FACTOR | FACTOR
//FACTOR  id | cons | ( EXPRESSION )

COND_SENTENCE  if LEXP then SEN_SEQUENCE [else SEN_SEQUENCE]   //条件语句
LOOP_SENTENCE  while LEXP do SEN_SEQUENCE                      //循环语句
LEXP  EXPRESSION LOP EXPRESSION
LOP   < | > | <= | >= | ==

文件说明

include

  • datastructure.h: 定义数据结构。
  • lexanalyse.h: 定义词法分析类。
  • objectivecode.h: 定义目标代码生成类。
  • parser.h: 定义语法分析类。
  • SYNBL.h: 定义符号表类。
  • keshe_final.h: 项目头文件。

src

  • main.cpp: 主程序。
  • lexanalyse.cpp: 词法分析器实现。
  • objectivecode.cpp: 目标代码生成实现。
  • parser.cpp: 语法分析实现。
  • synbl.cpp: 符号表实现。
  • pretreat.cpp: 预处理实现。
  • VirtualMachine.cpp: 虚拟机实现。

res

  • keshe_final.sln: 解决方案文件。
  • keshe_final.vcxproj: 项目文件。
  • keshe_final.vcxproj.filters: 项目过滤器文件。
  • keshe_final.ico: 项目图标文件。
  • small.ico: 小图标文件。
  • grammer.txt: 文法说明。
  • test1.txt: 测试文本1。
  • test2.txt: 测试文本2。
  • targetver.h: 目标版本头文件。
  • Resource.h: 资源头文件。
  • framework.h: 框架头文件。

运行指南

  1. 打开 Visual Studio 2022。
  2. 加载解决方案文件 ProjectFiles/keshe_final.sln
  3. 编译并运行项目。

功能示例

主界面

主界面

语法分析

语法分析

中间代码生成和代码优化

中间代码生成和代码优化

目标代码生成

目标代码生成

致谢

我们的实现以 NEUEasyCompiler 作为起点。我们感谢其作者的贡献。

创建者:Léon

参与开发者: Léon,lyh,mzh,hxr,szy

贡献

欢迎对本项目进行贡献!😊😊😊

该课设仍然存在一定改进之处,如:

  • 不支持字符串、数组、结构体、函数。若您希望在此课设代码上进一步开发,欢迎提交 issue 或 pull request。贡献方式:
  • 未来建议使用 CMake 来管理项目,CMake 可以有效简化构建过程,尤其是在文件较多的情况下,可以减少每次修改后的编译时间。
  1. Fork 本仓库
  2. 创建一个新的分支 (git checkout -b feature-branch)
  3. 提交你的修改 (git commit -am 'Add new feature')
  4. 推送到分支 (git push origin feature-branch)
  5. 创建一个新的 Pull Request

About

Northeastern University Compiler Principles Course Lab. This project is the design and implementation of a simple grammar-based compiler frontend

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published