Git Product home page Git Product logo

syntax_analysis's Introduction

语法分析---by rockcor

使用说明

  1. 运行环境为Microsoft Visual Studio Community 2019 + win10 LTSC
  2. 测试文件为本目录下test.txt
  3. 在2020李同学的基础上改进,代码量翻倍,并改用纯C编写
  4. 对于变量,定义即声明;对于函数,必须在调用前声明+定义(main函数默认已声明)
  5. 仅支持int short float char类型

主要技术

  1. 使用哈希表提高查找token和标识符的效率
  2. 使用递归实现自扩展和模块化
  3. 使用栈进行变量、大括号、if else语句、表达式的分析

改进

  1. 修复了一些BUG(部分是改C以后产生的),增加了一些注释
    1. 字符串比较和赋值全部改用str系列
    2. 栈用老师课上写的接口(带尾结点)
    3. 函数体内局部变量定义合法性分析
  2. 注释在词法分析中直接打出,不存储;支持多行注释
  3. 用宏减少了重复代码并提高了可读性
  4. 优化逻辑,尽量减少代码量

新增功能

  1. 支持浮点数float的分析(不完善)
  2. 函数体内的变量定义和赋值可以是变量、常量、函数调用,以及上述三种的混合
  3. if、while小括号内布尔语句合法性判断
  4. 完善for小括号内三段语句合法性判断,第一段可以是定义,独立深度
  5. 完善break、continue(必须在循环内)、return(非void必须有返回值)
  6. return、if、else、for后无大括号单行语句合法性判断
  7. 支持else if
  8. 支持||、&&、!、sizeof
  9. 记录变量和函数返回值的数据类型,完善部分类型判断(变量和函数可以在表达式中)
  10. 增加对变量、函数重定义的报错
  11. 增加对同一函数多次声明不一致的报错
  12. 增加对变量、函数使用前未定义/声明的报错
  13. 函数嵌套调用

待完善

  1. 变量类型判断仅记录最浅一次,且退出函数后未销毁(需结合变量栈)
  2. main函数前定义同时声明,检测是否有main函数
  3. if else需结合大括号分析
  4. 死循环/死锁的初步判断
  5. 变量/函数未使用的提示
  6. 结构体/数组/字符串/二维数组/指针及指针相关操作
  7. 函数指针(在变量定义时)
  8. 函数重载
  9. 报错不够精准
  10. 自动缩进
  11. 最后缺}无法定位行数
  12. static extern
  13. 强制类型转换
  14. 中括号、小括号的嵌套
  15. 存在众多尚未检测出的bug

TODO

  1. 变量重定义栈(二维链栈)

  2. 已声明但定义在调用后

syntax_analysis's People

Contributors

rockcor avatar

Stargazers

 avatar  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.