美文网首页
PL/0简单编译系统(零)

PL/0简单编译系统(零)

作者: Shiyi001 | 来源:发表于2017-01-17 15:39 被阅读0次

    本学期修了《编译原理》这门课。课程大作业是实现一个PL/0编译器。接下来将记录在实现过程中的心得、遇到的问题和解决办法,如有错误之处,欢迎指正。

    PL/0语言描述

    PL/0型语言是Pascal语言的一个子集。作为一门教学用程序设计语言,它比PASCAL语言简单,并作了一些限制。PL0的程序结构比较完全,相应的选择,不但有常量,变量及过程声明,而且分支和循环结构也是一应俱全。

    PL/0文法的EBNF表示如下:

    <程序> ::= <分程序>.
    <分程序> ::= [<常量说明部分>][变量说明部分>][<过程说明部分>]<语句>
    <常量说明部分> ::= const<常量定义>{,<常量定义>};
    <常量定义> ::= <标识符>=<无符号整数>
    <无符号整数> ::= <数字>{<数字>}
    <标识符> ::= <字母>{<字母>|<数字>}
    <变量说明部分>::= var<标识符>{,<标识符>};
    <过程说明部分> ::= <过程首部><分程序>;{<过程说明部分>}
    <过程首部> ::= procedure<标识符>;
    <语句> ::= <赋值语句>|<条件语句>|<当型循环语句>|<过程调用语句>|<读语句>|<写语句>|<复合语句>|<重复语句>|<空>
    <赋值语句> ::= <标识符>:=<表达式>
    <表达式> ::= [+|-]<项>{<加法运算符><项>}
    <项> ::= <因子>{<乘法运算符><因子>}
    <因子> ::= <标识符>|<无符号整数>|'('<表达式>')‘
    <加法运算符> ::= +|-
    <乘法运算符> ::= *|/
    <条件> ::= <表达式><关系运算符><表达式>|odd<表达式>
    <关系运算符> ::= =|<>|<|<=|>|>=
    <条件语句> ::= if<条件>then<语句>[else<语句>]
    <当型循环语句> ::= while<条件>do<语句>
    <过程调用语句> ::= call<标识符>
    <复合语句> ::= begin<语句>{;<语句>}end
    <重复语句> ::= repeat<语句>{;<语句>}until<条件>
    <读语句> ::= read'('<标识符>{,<标识符>}')‘
    <写语句> ::= write'('<标识符>{,<标识符>}')‘
    <字母> ::= a|b|...|X|Y|Z
    <数字> ::= 0|1|2|...|8|9
    

    实现效果

    运行界面

    项目整个界面分为导航栏,代码区,token表区,符号表区,Pcode区以及控制台。各分区的功能如下:

    分区 功能
    导航栏 打开,关闭或保存文件;编译和执行代码
    代码区 展示并编辑代码
    Token表区 展示代码中的token
    Symbol表区 展示代码编译过程中生成的symbol表
    Pcode表区 展示代码生成的所有Pcode
    控制台 输出编译信息

    相关代码在shiyi001的PL/0编译器,运行环境为JRE1.8

    NEXT ONE: PL/0简单编译系统(一)

    相关文章

      网友评论

          本文标题:PL/0简单编译系统(零)

          本文链接:https://www.haomeiwen.com/subject/htgubttx.html