编译原理相关Demo
-
一阶公式实例化为输入一个一阶闭公式集,以这个公式集中出现的常量的集合为论域,将这个一阶公式集转化为与它等价的命题公式集。
A1. 设计一个语言可以表述上述的一阶公式集,给出这个语言的词法与语法;
A2. 对输入的文件进行语法分析:
定义相应的数据结构保存这个公式集和其中出现的常量; 定义相应的语法树,并且可以输出语法分析的结果; 当出现输入错误时,可以指出出错的位置和可能的原因;
A3. 将这个公式集实例化并化简,将结果以文本的形式输出;
A4. 判断输出的命题逻辑公式集是否是可满足的,如果是则给出一个模型
主要功能如下:
主要功能包括:
- 以文本形式输入一阶公式实例化工具
- 展示生成语法树
- 将这个公式集实例化并化简,结果从屏幕输出并保存到相应文本文件
- 输出命题逻辑公式集是否是可满足的,如果是则输出各变量取值。
- 同时将结果保存到相应文本文件。
开发环境:
操作系统:win7
编译环境:java jdk1.8
开发工具:
eclipse, Antlr4(支持包)
-
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)应该书写完善的软件文档