主页

索引

模块索引

搜索页面

其他

闭包

一门语言的作用域:

1. 静态作用域(Static Scope)
  大多数语言都是采用静态作用域
  由程序代码决定,在编译时就能完全确定,所以又叫做词法作用域(Lexcical Scope)
2. 动态作用域(Dynamic Scope)
  变量引用跟变量声明不是在编译时就绑定死了的。
  在运行时,它是在运行环境中动态地找一个相同名称的变量。
  如: bash 脚本语言
  在运行时确定,所以又叫做运行时作用域(Runtime Scope)

继承&多态

子类型有两种实现方式:

1. 名义子类型(Nominal Subtyping)
    需要显式声明继承了什么类,或者实现了什么接口
2. 结构化子类型(Structural Subtyping),又叫鸭子类型(Duck Type)
    一个类不需要显式地说自己是什么类型,只要它实现了某个类型的所有方法,那就属于这个类型

编译算法篇

NFA 和 DFA

NFA 的特点是,它存在某些状态,针对某些输入,不能做一个确定的转换,这又细分成两种情况:

1. 对于一个输入,它有两个状态可以转换。
2. 存在 ε 转换。也就是没有任何输入的情况下,也可以从一个状态迁移到另一个状态。

无论是 NFA 还是 DFA,都等价于正则表达式:

1. 所有的正则表达式都能转换成 NFA 或 DFA
2. 所有的 NFA 或 DFA,也都能转换成正则表达式
https://img.zhaoweiguo.com/knowledge/images/cores/compilers/nfa_dfa1.jpeg

解析 int | [a-zA-Z][a-zA-Z0-9]* | [0-9]+ 的过程

“贪婪(greedy)” 策略(尝试让 * 号匹配尽量多的字符)
非贪婪策略,或者叫 “忽略优先” 策略
    有的正则表达式工具会支持多加一个?,比如??、*?、+?,来表示非贪婪策略

主页

索引

模块索引

搜索页面