图灵已经找到了计算能力的基石,但寻找智慧的基石这项工作,仍然没有见到成功的曙光,世界在等待着下一个“图灵”的出现。
谁会是下一个图灵呢,是奥特曼吗,我们不得而知,GPT的发布如火如荼,吸引了全世界的注意力。
AspectJ官网^4
AspectJ文档^1
pointcuts指的是程序中的某些链接点(某些时机),例如call(void Point.setX(int))
表示:调用类Point
的setX(int)
方法时
pointcuts可以使用与或非表达式(||,&&,!
)连接,比如 call(void Point.setX(int)) || call(void Point.setY(int))
pointcuts可以被定义为变量,如下面代码中的move()
1 | pointcut move(): |
当然pointcuts定义的时候还可以使用通配符,比如call(void Figure.make*(..))
代表Figure
的以make开头且返回值为void的方法(不关心参数)调用的时候。比如call(public * Figure.* (..))
代表Figure
的任何方法(不关心方法名,参数,返回值)调用的时候。
https://github.com/bingohuang/effective-go-zh-en
在最开始学习GO的时候,写了几篇Blog,发现代码里面的对齐都是TAB,这让我很困惑,知道现在才知道,GO语言,默认使用TAB进行对齐。
当然GO还有自己的空格规则x<<8 + y<<16
,向这份代码,我们根据空格就能知道计算的优先级了。
Go语言要求package语句前加上注释,来介绍整个包,如果package包含多个文件,则只需要在其中一个文件中标注即可。
1 | /* |
经过了前面的LL语法分析,现在我们进入到了LR语法分析,LR语法分析也是一套算法,这里主要介绍两个,一个是SLR算法,领个是LR1算法。
LR语法分析本质上为从左到右自底向上算法,从左到右一个一个读入字符,然后按照产生式进行规约,直到规约出文法开始的符号。
LR语法分析最重要的就是移入和规约。下面举一个例子来理解移入和规约。
1 | 加法:( |
文法的种类有很多,正则文法,上下文无关文法,上下文有关文法。
这一块内容就是我们平时所用到的正则表达式的文法,他的词是各个字符。
上下文无关文法涉及到4个定义
例子
1 | 加法: |
上诉文法可以接受 1+2, 我们只需要把1和2视为number,即可,此时的词法单元就是1,2,+
由于高级程序设计语言基本可以被视为上下文无关文法,文法的语法分析有很多算法,后面会依次对他们进行介绍。
词法分析,如其名,只分析词语,即token,词是一个文法的最小单元。至于什么是文法,后面会介绍,这里不需要过多忧虑。
比如我们有一个代码,这个代码和c/c++很相似(但是这个是pava代码,读者目前可以理解为c代码),这是一个计算斐波那契数列的代码,他的词法分析结果是什么呢?
1 | int fib(int x){ |
下文的代码就是词法分析结果, 词法分析器从源文件依次读取,然后分割出最小的词法单元,
1 / 2