-
前端:编译器对程序代码的分析和理解过程,跟语言的语法有关,跟目标机器无关
-
词法分析(Lexical Analysis):识别词法记号(Token)
- 可手写规则(如 GNU 的 C 编译器)
- 也可用词法分析器生成工具(如 Lex/Flex),基于正则文法(Regular Grammar)。工具读入正则表达式,输出有限自动机(Finite-state Automaton,FSA,or Finite Automaton)
-
语法分析 (Syntactic Analysis / Parsing):识别程序语法结构,构造抽象语法树(Abstract Syntax Tree)
可以参考 JointJS 提供的可视化 JavaScript AST demo。
执行脚本语言的过程,就是遍历 AST 的过程(此处遍历通常是后序遍历,左->右->根)。
AST 构造完成后,会标记一些属性,例如源代码的行号。- 如何构造 AST:
- 手写递归下降算法(Recursive Descent Parsing)
- 使用工具:Yacc、Antlr、JavaCC
- 如何构造 AST:
-
语义分析(Semantic Analysis):根据语义规则进行分析判断,上下文分析、消除歧义
语义分析的部分结果,会标记在 AST 上,例如 int 等数据类型
-
-
后端:生成目标代码,跟目标机器有关
- 生成目标代码
- 对代码进行优化
相关文章
- 02-0320200314英语上课笔记 1v1
- 02-03ng-学习笔记1
- 02-03Azure-900学习 云计算入门笔记整理-1
- 02-03编译原理词法分析
- 02-03Webgl入门笔记——shader1
- 02-03图论笔记1 匹配
- 02-03字符串-《go语言底层原理剖析》读书笔记
- 02-03(转)live555学习笔记9-h264 RTP传输详解(1)
- 02-03Arduino入门笔记(1):认识Arduino
- 02-03《TCP/IP详解》卷1 第15章读书笔记