编译原理

161 阅读1分钟

什么是编译程序

  • 翻译程序:将某一种语言程序(源语言程序)等价转换为另一种语言程序(目标语言程序)的程序
  • 编译程序:把一种高级语言程序等价地转换为另一种低级语言程序(如:汇编语言、机器语言)
  • 解释程序:把源语言写的源程序作为输入,但是不产生目标程序,而是边解释边执行源程序本身,

编译结构

把编程语言看做句子

  1. 词法分析:分析出各个单词
  2. 语法分析:分析出各类短语
  3. 语义分析:根据句子结构分析出句子中各个短语在句子中充当什么成分
  4. 给出中间表示形式

编译效果

编译器工作结构

编译器分为两个阶段:前端(分析源码)和后端(生成目标代码)

编译器工作结构

语法分析树与抽象语法树的区别

解析树是您的语法及其工件的结果(您可以为同一种语言编写无穷多的语法),AST 将解析树简化为最接近该语言。同一种语言的几种语法会给出不同的解析树,但应该产生相同的 AST。

语法分析树和语法树不是一种东西。习惯上,我们把前者叫做“具体语法树”,其能够体现推导的过程;后者叫做“抽象语法树”,其不体现过程,只关心最后的结果。 我要做的,是抽象语法树ast 语法分析树与抽象语法树

有一个在线生成语法树的网站,是基于java-parser的,可以用多种语言——网站——竟然是js写的,震惊

好像有用java写的,