℃江的观后感--语法分析器、语义分析器和代码生成器总结

其实javac在进行这些个什么器的实现都是由一些类生成。这里做一个总结,方便日后查看吧。

  • 语法分析器

    我记得前面是说过词法分析器这个东西的,其作用也很直观,就是将Java源文件的字符流转换成对应的Token流,我们我们所谓规范化代码程序,让其将人能看懂的转换成机器能看懂的第一步。第二部到了语法分析器的时候,说白了就是调用了 Tree 接口及其实现类。这个过程其实是在读取词法分析后read Token流的过程,并解析成了一个有结构,有一定规则并且可以方便操作的语法树。

  • 语义分析器

    不知各位是否还记得,我们最开始用记事本‘照葫芦画瓢’的时候,有没有注意到一个细节,我们想在控制台打印我们语句,需要先进行Javac,然后我们发现目录下多了一个class 文件,那其实就是执行过后的字节码文件,之前*.java的文件是给人看的,这个.class文件是给机器看的。我们现在阐述的什么词法分析、语法分析等等一系列操作,都是为了详细阐述这个生成.class 文件javac编译器都做了啥操作,其实说白了就是做了翻译的操作,很多的开发工具都是动态编译的,你前脚写完代码实时同步语法错误,这就造成我们理解的偏差,尤其是初学者我们可能会觉得编译器报错根本不算报错。这还是很危险的。我说说这个构成,主要是最近有阅读一些书籍,看过一些视频,这个过程在实际工作成其实可以忽略,但是这个过程几乎不可避免,编译原理的作用我只说了javac,其实理论上我们能实现将我们写的Java代码,翻译成任何类型的机器语言。

    语义分析器主要也是调用了几个类:
    1、Enter类:用来操作类中出现的符号,输入到指定的符号表中,这里面也是有一个解析的过程。符号的理解可不是标点符号,是类名称,变量名称这类的符号。
    2、JavacProcessingEnvironment类:这个类是用来处理注解的,这有点儿类似Spring的那种注解的方式。
    3、Attr类:这个类是用来的标注的,逻辑判断一些语义的合法性,通俗来讲就是生活中的:说人话。
    4、Flow类:顾名思义了,数据流分析,这就是在说人话的前提下,看看是不是能说出一句完整的人话。

  • 代码生成器

    经过这步之后,会生成最终的Java字节码,其实也是调用了一个类来实现的:

    Gen类:就是将一定的组织格式输出到class文件中。这就搞定了,最总编译器完成了他的翻译工作。

你可能感兴趣的:(java)