Skip to content

Latest commit

 

History

History

grammar

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

<<<<<<< HEAD:grammar/README.md

语法分析器

TODO

  • 基础框架搭建

  • first集、follow集

  • 预测分析表

  • 基本的C子集文法

    • 全局变量定义、函数声明、定义

      int func(int t){ // 函数定义
          return (2 + t);
      }
      int a, b, c; // 全局变量声明
      void test(); // 函数声明
      int main(){ // 主函数
          int num1 = 1, num2 = 2, op, ans; // 多变量声明、赋值
          get(num1, num2, op); // 识别函数调用
          if (op == 0) { // if 语句
              ans = num1 + num2; // 二元运算
          };
          if (op == 1) {
              ans = num1; // 赋值
          };
          if (op == 2) {
              ans = num2 | num1; // 逻辑运算
          };
          if (op - 3 == 1) { // 运算逻辑判断
              func(10);
          }else{
              ans = 15 + 2; // 常数赋值运算
          }
          put(ans);
      }    
    • 函数调用赋值

      int func(int t){
          return (2 + t);
      }
      int main(){
      	int x = func(5);
          
      }
  • 自顶向下分析分析

    image-20210507025506075

  • 错误处理

    • 错误识别
    • 错误恢复

    image-20210507143613147

  • 日志

    • 错误日志

    image-20210507143645196

  • 语法分析树

    • 数据结构实现
    • 结构化打印(彩色)、保存

    image-20210507025150612

  • 重构某些数据结构,封装数据类型而不是使用item[0] item[1]进行访问

=======

语法分析器

TODO

  • 基础框架搭建

  • first集、follow集

  • 预测分析表

  • 基本的C子集文法

    • 全局变量定义、函数声明、定义

      int func(int t){ // 函数定义
          return (2 + t);
      }
      int a, b, c; // 全局变量声明
      void test(); // 函数声明
      int main(){ // 主函数
          int num1 = 1, num2 = 2, op, ans; // 多变量声明、赋值
          get(num1, num2, op); // 识别函数调用
          if (op == 0) { // if 语句
              ans = num1 + num2; // 二元运算
          };
          if (op == 1) {
              ans = num1; // 赋值
          };
          if (op == 2) {
              ans = num2 | num1; // 逻辑运算
          };
          if (op - 3 == 1) { // 运算逻辑判断
              func(10);
          }else{
              ans = 15 + 2; // 常数赋值运算
          }
          put(ans);
      }    
    • 函数调用赋值

      int func(int t){
          return (2 + t);
      }
      int main(){
      	int x = func(5);
          
      }
  • 自顶向下分析分析

    image-20210507025506075

  • 错误处理

    • 错误识别
    • 错误恢复

    image-20210507143613147

  • 日志

    • 错误日志

    image-20210507143645196

  • 语法分析树

    • 数据结构实现
    • 结构化打印(彩色)、保存

    image-20210507025150612

  • 重构某些数据结构,封装数据类型而不是使用item[0] item[1]进行访问

00d4ac13dd3847b2e9e41f974b0acf4c3ad17d0b:grammer/README.md