/CppCompiler

A C# application that simulates the important workflow of a C++ compiler, continuous updating ...

Primary LanguageC#MIT LicenseMIT

CppCompiler

CppCompiler license

本程序还存在一些小bug,使用前请先查看"版本迭代&说明"!


一、项目功能

一个模拟C++编译器(仅支持对.cpp源文件的编译)重要工作流程的C#应用程序。


二、项目运行效果

1. 主菜单

1



2. 词法分析界面

2



3



3. 词法分析器生成器界面(类似flex的功能)

4



5



6



4. TINY扩充语言的语法分析

7



5. LL(1)分析器

8



去掉 L->ε 前,文法有二义性,因为FIRST(L)={e, ε}含有ε,且FOLLOW(L)={e, $},交集非空

9



去掉 L->ε 后,文法无二义性

10



11



12



13



14



15



6. 关于

about


三、版本迭代&说明

1、V1.0.0

  • 完成模拟C++编译源程序时的词法分析功能;

2、V1.0.1

  • 改善了压缩过程,使得压缩后得到的cpp文件可以直接被编译执行;

3、V1.0.2

  • 修复了关于扫描多行注释时崩溃的bug;
  • 修复了某些注释没有被正常压缩掉的bug;

4、V2.0.0

  • 完成词法分析器生成器模块(正则表达式若超过一定长度,会崩溃,有bug,后期有空会修复);

5、V3.0.0

  • 完成TINY扩充语言的语法分析模块;

  • 将“TINY扩充语言的语法树的生成过程”抽象出一个函数接口getSyntaxTree,并打包成一个dll文件,如果其他工程需要使用到“TINY扩充语言的语法树的生成”,则可以直接导入该dll文件并引用函数接口getSyntaxTree即可。具体细节如下:

    • 封装该dll文件的项目名为 TinySyntaxAnalysis

    • 函数接口如下(位于main.c文件):

      /*
        读入全路径为sourceFileFullName的源代码文件,将扫描得到的语法树打印到全路径为savedFileFullName的文件中
      */
      extern __declspec(dllexport) void getSyntaxTree(char* sourceFileFullName, char* savedFileFullName);
    • 该项目生成的dll文件的所在位置:TinySyntaxAnalysis.dll

    • 项目CppCompiler使用该dll文件时,放置该dll文件的位置:TinySyntaxAnalysis.dll


6、V4.0.0

  • 完成LL(1)分析器模块;
  • 实现了简单易用的用户交互逻辑,基本做到了用户的傻瓜式使用;
  • 实现了完善的用户提醒机制,有效防止用户的错误操作;
  • 通过后期大量的文本规则样本测试后发现,还有一些隐藏的bug,其中包括“求非终结符的FOLLOW集不完整“的bug;

7、V4.0.1

  • 修复了“求非终结符的FOLLOW集不完整“的bug;
  • 目前对于一些比较复杂的文法规则进行处理时,还会存在一些bug,会导致应用程序的崩溃、无响应或者LL(1)分析错误,鉴于目前身边有事,后期有空再加以改进,也欢迎有意者Pull Request~~

四、当前版本

V4.0.1


五、其他资料

1、玩转flex

想简单体验一下词法分析器生成器的朋友,可以使用flex~