Skip to content

monster-caizi/Compilation-Principle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Compilation-Principle

编译原理相关Demo

一阶公式实例化

  • 一阶公式实例化为输入一个一阶闭公式集,以这个公式集中出现的常量的集合为论域,将这个一阶公式集转化为与它等价的命题公式集。

    A1. 设计一个语言可以表述上述的一阶公式集,给出这个语言的词法与语法;

    A2. 对输入的文件进行语法分析:

    定义相应的数据结构保存这个公式集和其中出现的常量;
    
    定义相应的语法树,并且可以输出语法分析的结果;
    
    当出现输入错误时,可以指出出错的位置和可能的原因;
    

    A3. 将这个公式集实例化并化简,将结果以文本的形式输出;

    A4. 判断输出的命题逻辑公式集是否是可满足的,如果是则给出一个模型

    主要功能如下:

    主要功能包括:

    1. 以文本形式输入一阶公式实例化工具
    2. 展示生成语法树
    3. 将这个公式集实例化并化简,结果从屏幕输出并保存到相应文本文件
    4. 输出命题逻辑公式集是否是可满足的,如果是则输出各变量取值。
    5. 同时将结果保存到相应文本文件。

    开发环境:

    操作系统:win7

    编译环境:java jdk1.8

    开发工具:

    eclipse, Antlr4(支持包)

Lab1与Lab2为基础实验

  • Lab1为C++源代码单词扫描程序,MFC程序。

    功能:

    (1)C++源代码扫描程序识别C++记号。 C++语言包含了几种类型的记号:标识符,关键字,数(包括整数、浮点数),字符串、注释、特殊符号(分界符)和运算符号等。 (2)打开一个C++源文件,打印出所有以上的记号。 (3)应用程序应为Windows界面。 (4)选作部分:为了提高C++源程序的可读性,C++程序在书写过程中加入了空行、空格、缩进、注释等。假设你想牺牲可读性,以节省磁盘空间,那么你可以存贮一个删除了所有不必要空格和注释的C++源程序的压缩文本。因此,程序中还应该有这样的压缩功能。 (5)选作部分:进一步思考或实现——如何进一步实现减小源文件大小的压缩功能。 (6)应该书写完善的软件文档。

    运行效果样本

    C++源程序:

    Test.cpp

    #include<iostream.h> main() { int i; cin>>i; if (i>3) cout<<“ok”; }

    扫描结果:

    #特殊符号

    Include 关键字 < 特殊符号 iostream. h 关键字

    > 特殊符号
    main 关键字 ( 特殊符号 ) 特殊符号 { 特殊符号 int 关键字 i 标识符 ; 特殊符号 cin 关键字

    > > 特殊符号 i 标识符 ; 特殊符号 if 关键字
    ( 特殊符号 i 标识符 特殊符号 3 数 ) 特殊符号 cout 关键字 << 特殊符号 “ok” 串 ; 特殊符号 } 特殊符号

  • Lab2为TINY扩充语言的语法分析程序,MFC程序。

    扩充的语法规则有:实现 while、do while、for语句和求余计算式子,具体文法规则自行构造。 可参考:P97及P136的文法规则。

    (1) While-stmt --> while exp do stmt-sequence endwhile (2) Dowhile-stmt-->do stmt-sequence while exp (3) for-stmt-->for identifier:=simple-exp to simple-exp do stmt-sequence enddo 步长递增1 (4) for-stmt-->for identifier:=simple-exp downto simple-exp do stmt-sequence enddo 步长递减1

    1.要求: (1)要提供一个源程序编辑界面,以让用户输入源程序(可保存、打开源程序) (2)可由用户选择是否生成语法树,并可查看所生成的语法树。 (3)应该书写完善的软件文档