Featured image of post oopre课堂随笔-序列输入

oopre课堂随笔-序列输入

鉴定为不如看PPT

序列输入之数据特征分析

数据类型

    不作介绍

关系

顺序关系

    依次赋值

层次关系(赋值的所属对象)

1
2
3
4
5
6
7
8
Scanner scanner = new Scanner(System.in);
int i;
int n = scanner.nextInt();
for(i = 0; i < n; i++){
   id = scanner.nextInt();
   name = scanner.next();// id 与 name之间为顺序关系
   // 不同组之间形成不同层次
}

结构

硬编码式的解析处理

 较为简单,确定的输入方式   
 缺点:兼容性灵活性差  

使用正则表达式的解析处理

    可对应一个有穷自动机解析  
  • 默认使用贪婪匹配

  • “.” 任意

  • “*” 同一项内容任意项

  • “+” 同一内容一项或多项

  • “?” 同一内容零项或一项

  • 非贪婪匹配

       ```java  
      Pattern = new Pattern.compile("(\\w+?)((good)*)"); 
      // 添加 \w+? 实现非贪婪   
      // 注意 \\ 编译问题  
      ```  
    

弊端:可读性差,技巧性高

递归下降式解析处理

递归

    借助递归进行解析

下降

    从顶层到底层 按层解析

文法

终结符
    取值不可变的符号,单个字符层级上的元素
非终结符
    取值可变,以<>表示
定义规则

L -> R
定义非终结符的取值方式

1
2
3
4
5
    <Var> -> <digit> | <Const> <Var> //递归下降 无限循环
    <Const> -> <op> | <digit> <op>
    <digit> -> '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9'
    <op> -> '+'|'-'|'*'|'/' 
    // '+'为终结符,<op>,<Const>为非终结符

词法分析:定义Token

1
2
3
4
5
public class Token{
    private String name;
    private Type type;
    // ...
} //实现了一种抽象

语法分析:建立抽象语法树

根据文法所定义的关系

1
2
3
4
5
public class Var{
    private Arraylist<digit>;
    private Arraylist<op>;
    // ...
} // 在表达树的方面降了一层

由表达式到项,由项到因子
每一个非终结符都对应一棵局部语法树

唉唉 只是课上跟着写还是太草率了

不如PPT

comments powered by Disqus
Easy Life and Easy Learning
使用 Hugo 构建
主题 StackJimmy 设计