手把手带你写一门编程语言¶
目录
开篇¶
示例:
// 一个函数的声明,这个函数很简单,只打印 "Hello World!"
function sayHello(){
println("Hello World!");
}
// 调用刚才声明的函数
sayHello();
词法分析¶
词法分析:拆分 Token 串(图中不同的颜色代表不同类型的 Token)¶
词法分析:分隔符¶
词法分析:状态迁移图,有限自动机:解析 -、– 和 -= 三种 Token 的有限自动机¶
词法分析:增加了对多行注释、/、/=、标识符、关键字和空白字符处理能力的有限自动机。你还可以继续扩展这个图,直到它能够提取所有的 Token 为止。有了这个大图之后,你就可以照着这个图写程序了。¶
备注
做词法分析的一个最佳实践,就是先把标识符和关键字统一提取出来,然后再从里面把关键字单独提取出来就行了。
语法分析¶
语法分析:解析器的工作,就是要读取一个 Token 串,然后把它转换成一棵 AST¶
语法分析的思路(递归下降算法):
首先,写出语法规则,比如说用 EBNF 格式。
第二,根据语法规则,分别匹配每个子元素。
递归下降(Recursive Descent)
第三,如果一条语法规则可能有多个展开方式
要依次尝试去匹配
语义分析¶
引用消解(Refrence Resolving)





