Code Monkey home page Code Monkey logo

hust-datasturcture-curriculum's Introduction

Programming Comprehensive Course Design of HUST.ComputerScience

说明

这是华中科技大学2022级程序设计综合课设选题二的源码。因为使用的IDE是CLion,所以会有cmake-build-debug和CMakeLists.txt。

目录结构

  • include文件夹下是整个项目所有需要的头文件。
  • output文件夹用来放置程序运行过程中生成的中间文件和最后需要生成的对应的缩进文件。在main.cpp中應當會自動生成output文件夾的
  • src文件夹下是除了main.cpp外其他的相关函数的源码。
  • test文件夹放置自检和给老师检查时候的代码文件。

其中file2.txt中的内容比较齐全,然后在为了应对不同检查部分的时候需要进行的操作也有相关说明。 照着说明一步一步的注释,然后再运行,然后再取消注释,再运行就可以了。

需要特别注意的是在Windows操作系统下,换行符是\r\n,而在Linux和MacOS下换行符都是\n。如果没有弄得特别清楚了, 或者直接跑file2.txt有报错的话就自己手打一遍。

代码文件说明

为了项目整体架构明了,对于不同的功能都分开进行编写。

  • lexer专门负责进行词法分析,
  • preprocess负责预处理,
  • parser负责语法分析,同时构建抽象语法树,
  • profunction是和语法树相关的定义和功能函数的实现,
  • printfile是最后打印缩进文件相关代码,
  • SymbolTable是专门为了实现变量、函数的声明而封装的类。

项目功能说明

该语法检查器无法真正做到对C语言进行完整语法和词法分析,因此专门针对该项目能够检查的语言进行了语法补充说明如下:

  1. 外部变量只能声明或者在声明的时候赋初值,不能先声明了外部变量以后又能够在所有函数体外部赋值 =》理由:全局变量居然在函数外面随便被改动,不太好

  2. 局部变量只能先集中声明再集中进行操作,不能声明和操作混杂 =》理由:变量就不可以被同名覆盖了,也不用考虑作用域相关的问题,涉及到的变量都已经在刚刚进入函数的时候声明好了,不允许声明和操作混杂的情况 eg:

    int x;int y;
    x = 30; y = 20;

    正确

    int x; x = 30;
    int y; y = 20;

    错误

    补充: 根据以上规则,也不允许for(int i=0;i<10;i++)中在for的括号内再声明变量

  3. 该语言只支持一维数组的声明

  4. 数组只能声明,不能操作,因为下标运算符并没有被包含在要求的功能内。 补充: 数组声明[]内必须有数字

  5. 数据类型里面将不考虑long long,unsigned long, unsigned short之类的类型(反正也从来没有用到过这些)

  6. 类型判断不会自动类型转换,只要不是同一类型就直接报错

  7. 布尔类型的双目运算符操作后的结果也将和两个操作数同类型(符合上一条)

  8. return后面如果是有括号的表达式将不负责判断return的值是否与声明一致(其实聪明一点说可以说成return不支持后面的表达式第一个字符为括号)

  9. 如果出现了变量由函数返回值赋值的情况,打印语法树的时候将打印value值为),以指代此处为函数

  10. extern, const之类的关键字虽然可以词法识别,但是语法不识别,因此将报错

  11. void类型的函数没有返回值检查

  12. 其它函数但是没有return也不检查

  13. 出现错误符号的时候,预编译仍然显示成功,即不至于进行不下去,后面语法检查的时候仍然会报错

  14. 不会作用域判断

补充说明

因为我在作该项目的时候同时使用MacOS,Linux和Windows三个操作系统,所以使用CLion, 并且在不同平台之间都直接通过Reload Cmake Project,然后更改system命令而实现。 但是因为似乎windows系统终端不能很好适应utf-8编码,因此为了操作系统之间输出都不乱码, 所有的输出都改成了英文,而且使用的是utf-8编码而不是GBK。

由于程序主体是在Mac上写的,而且不是特别熟悉Windows下面的system("pause"),所以回车可能需要多敲几下。

hust-datasturcture-curriculum's People

Contributors

cassiusblackx avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.