Skip to content

同济大学2023-2024 软件学院 编译原理 期末课程设计 一个PL/0 Compiler的高级语言实现

Notifications You must be signed in to change notification settings

Iuriak/PL0-Compiler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

编译原理期末项目:PL/0 Compiler 编译算法实现

团队成员:

同济大学2021级软件工程 张恺瑞 蒋钰萱 赵明泽 宓田田

概览

该项目是小型 PL/0 编程语言的简单编译器,旨在加深对编译器构造的理解。PL/0 编译器将 PL/0 语言源程序作为输入,并输出以三地址代码格式表示的中间代码。

该编译器是单通道编译器,其中词法分析模块作为子程序,在需要时由语法分析模块调用。实现过程使用语法定向翻译技术,在进行语法分析的同时生成中间代码,生成的代码保存到文件中。

功能

  • 输入:PL/0 语言源程序。
  • 输出:中间代码(三地址代码)。
  • 单程编译过程。
  • 整合了词法分析、语法分析和中间代码生成。
  • 语法定向翻译方法。

使用的算法

  • 词法分析: Thompson算法
  • 语法分析: 递归下降解析法
  • 中间代码生成: 属性⽂法、翻译⼦程序等

PL/0 语言语法规则

  • 词法规则:

    • 关键字: programbeginendconstvarwhiledoifthen
    • 标识符: 以字母开头,后跟字母和数字的字符串。
    • 整数: 以数字开头的数字序列。
    • 运算符和分隔符: +, -, *, /, :=, =, <>, >, >=, <, <=, (, ), ;, ,.
  • 语法规则:

    • <程序>→<程序⾸部> <分程序>
    • <程序⾸部>→PROGRAM <标识符>
    • <分程序>→[<常量说明>][<变量说明>]<语句>(注:[ ]中的项表⽰可选)
    • <常量说明>→CONST <常量定义>{,<常量定义>} ; (注: { }中的项表⽰可重复若⼲次)
    • <常量定义>→<标识符>:=<⽆符号整数>
    • <⽆符号整数>→<数字>{<数字>}
    • <变量说明>→VAR<标识符>{,<标识符>};
    • <标识符>→<字⺟>{<字⺟> | <数字>}
    • <复合语句>→BEGIN <语句>{; <语句>} END
    • <语句>→<赋值语句> | <条件语句 >| <循环语句> | <复合语句> | <空语句>
    • <赋值语句>→<标识符>:=<表达式>
    • <表达式>→[+|-]项 | <表达式> <加法运算符> <项>
    • <项>→<因⼦> | <项><乘法运算符> <因⼦>
    • <因⼦>→<标识符> |<⽆符号整数> | (<表达式>)
    • <加法运算符>→ + | -
    • <乘法运算符>→ * | /
    • <条件语句>→IF <条件> THEN <语句>
    • <循环语句>→WHILE <条件> DO <语句>
    • <条件>→<表达式> <关系运算符> <表达式>
    • <关系运算符>→ = | <> | < | <= | > | >=
    • <字⺟>→a | b …| x | y | z
    • <数字>→0 | 1 | … | 8| 9

PL/0 源程序示例

PROGRAM add

VAR x, y;

BEGIN
    x := 1;
    y := 2;
    WHILE x < 5 DO
        x := x + 1;
    IF y > 0 THEN
        y := y - 1;
    y := y + x
END

运行程序

环境

确保已安装 g++,并已在环境中设置,以便使用VScode编译和运行 C++ 代码。

编译项目

导航至项目目录,在终端中使用以下命令将源代码编译为可执行文件:

g++ -o program main.cpp Lexer.cpp Parser.cpp -std=c++17

运行 PL/0 编译器

要运行 PL/0 编译器,请使用以下命令:

./program

输出

运行编译器后,将生成中间代码保存到IR.txt,生成的标识符表将输出到IT.csv

About

同济大学2023-2024 软件学院 编译原理 期末课程设计 一个PL/0 Compiler的高级语言实现

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published