-
Notifications
You must be signed in to change notification settings - Fork 0
/
心得.txt
85 lines (54 loc) · 2.38 KB
/
心得.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
1.在expression合入的时候,通常语言有四类运算符:
算数运算符 + - * / % ++ --
关系运算符 == != > >= < <=
逻辑运算符 && || ! ^ & |
位运算符 & | ~ ^ >> << >>>
不同类型运算符之间有不同运算优先级
比方说 算数运算符 大于 关系运算符 大于 逻辑运算符
相同类型运算符之间也有优先级
比如说 * 大于 +
在BNF设计的时候,防止出现二义性,低一级运算表达式是由高一级运算表达式组成的
2.像java,c,c++这类的语言,函数的定义是不能放在函数内部的
所以最外层都是函数定义、变量定义(或者声明)
而python、js语言都有关键字function、def等等,允许函数定义在函数内部,有关键字在解析的时候更加方便
3.为什么感觉《自制编程语言》的produce是有问题的,会产生左递归问题?
所以修改了additive_expression等生产式
4.lambda表达式 在编程语言中就是能嵌入到其他表达式中的匿名函数(闭包)
1.直接定义一个函数,而不需要将定义函数和表达式分开
2.闭包是指将当前作用域中的变量通过值或者引用的方式封装到lambda表达式当中,成为表达式的一部分
它使你的lambda表达式从一个普通的函数标称了一个带隐藏参数的函数
3.把函数作为一个对象来传递
5.语法表示,上下文无关文法,为什么不使用正则表达式
因为正则表达式不可计数
S -> ( S )
| ε
磊引理
https://zh.wikipedia.org/wiki/%E6%B3%B5%E5%BC%95%E7%90%86
6.
异常会自动往上层栈传播:一旦异常被抛出,执行流就立即中止,取而代之的是自动的stack-unwinding操作,直到找到一个适当的catch子句。
使用error-code的话,要将下层调用发生的错误传播到上层去,就必须手动检查每个调用边界,任何错误,都必须手动转发(返回)给上层,稍有遗漏,就会带着错误的状态继续往下执行,从而在下游不知道离了多远的地方最终引爆程序。
java 里面有:
error : 比如超出jvm的最大内存限制、OutOfMemoryError
异常:
RuntimeException及其子类成为未检查异常(unchecked)
Checked Exception(非Runtime Exception)
7.
http://xahlee.info/comp/js_grammar_complexity.html
http://www.360doc.com/content/13/1203/17/2967695_334196604.shtml
http://stackoverflow.com/questions/30697267/is-javascript-a-context-free-language
file:///C:/Users/chainhelen/Downloads/%E7%AC%AC%E4%BA%94%E7%AB%A0---%E6%B3%B5%E5%BC%95%E7%90%86.pdf
模糊查询 => 不可计数
无关文法的判断
https://www.zhihu.com/question/52178803
8.
异常https://monoinfinito.wordpress.com/series/exception-handling-in-c/
9.bss只有装载的时候才会分配空间
fin_wait1
->fin
fin_wait2 <-ack close_wait
<-fin last_ack
time_wait -> closed
10.
return 3;
只有在function中才有效,nodejs文件中之所有可以直接return,是因为nodejs模块其实外面包裹着一层函数
11.为了实现闭包,携带上下文信息