白衣染霜花

编译器把一种语言规范转化为另一种语言规范的这个过程需要哪些步骤?回答这个问题需要参照《编译原理》,总结过程如下:        1)词法分析:读取源代码,一个字节一个字节的读进来,找出这些词法中我们定义的语言关键词如:if、else、while等,识别哪些if是合法的哪些是不合法的。这个步骤就是词法分析过程。        词法分析的结果:就是从源代码中找出了一些规范化的token流,就像人类语言中,给你一句话你要分辨出哪些是一个词语,哪些是标点符号,哪些是动词,哪些是名词。        2)语法分析:就是对词法分析中得到的token流进行语法分析,这一步就是检查这些关键词组合在一起是不是符合Java语言规范。如if的后面是不是紧跟着一个布尔型判断表达式。        语法分析的结果:就是形成一个符合Java语言规定的抽象语法树,抽象语法树是一个结构化的语法表达形式,它的作用是把语言的主要词法用一个结构化的形式组织在一起。这棵语法树可以被后面按照新的规则再重新组织。        3)语义分析:语法分析完成之后也就不存在语法问题了,语义分析的主要工作就是把一些难懂的,复杂的语法转化成更简单的语法。就如难懂的文言文转化为大家都懂的百话文,或者是注释一下一些不懂的成语。        语义分析结果:就是将复杂的语法转化为简单的语法,对应到Java就是将foreach转化为for循环,还有一些注释等。最后生成一棵抽象的语法树,这棵语法树也就更接近目标语言的语法规则。        4)字节码生成:将会根据经过注释的抽象语法树生成字节码,也就是将一个数据结构转化为另外一个数据结构。就像将所有的中文词语翻译成英文单词后按照英文语法组装文英文语句。代码生成器的结果就是生成符合java虚拟机规范的字节码。

java 如何转化成机器指令_Java代码到底是如何编译成机器指令的相关推荐

  1. 词法分析器java_Java代码到底是如何编译成机器指令的。

    原文地址:https://mp.weixin.qq.com/s/XH-JajAne0O7_yCYE5wBbg 作者:Hollis 在<Java代码的编译与反编译>中,有过关于Java语言的 ...

  2. java xml文件内容替换_java读取xml文件并转换成对象,并进行修改

    1.首先要写工具类,处理读取和写入xml文件使用的工具.XMLUtil.java importjava.io.FileInputStream;importjava.io.FileWriter;impo ...

  3. java xml 字符串转对象_java读取xml文件并转换成对象,并进行修改

    1.首先要写工具类,处理读取和写入xml文件使用的工具.XMLUtil.java import java.io.FileInputStream; import java.io.FileWriter; ...

  4. python编译成exe有意义吗_python工程编译成EXE

    前言 python编译成EXE文件后,可以独立使用.亲测,一个复杂的python工程包含多个包多个模块,可以生成exe文件. 目的 windows下将整个python工程编译成单个EXE或者单个目录带 ...

  5. java汉字转换成拼音_Java代码将汉字转换成拼音

    package com.sucre; //导入的jar包 import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pi ...

  6. java同步转化成异步_Java 如何把异步调用模拟成同步调用

    在某些时候,须要把异步调用模拟成同步调用的形态.例如,基于基于异步通讯的客户端须要同步调用. :-)异步 要实现这个转换,能够有多种实现方法:this 1.很经常使用的方法,应用循环机制:spa bo ...

  7. java 输入五种水果_java代码,实现输入编号,输出对应水果的单价~~~~

    总结:总感觉有问题,因为输出我写的太不对劲了,直接把price的价格写了出来然输出显示-- package com.badu; import java.util.Scanner; //从键盘输入次数, ...

  8. java 反射 慢在那里_Java 反射到底慢在哪?

    反射具体是怎么影响性能的?这引起了我的反思. 是啊,在阐述某个观点时确实有必要说明原因,并且证明这个观点是对的,虽然反射影响性能人尽皆知,我曾经也真的研究过反射是否存在性能问题,但并没有在写文章的时候 ...

  9. java 中组合与复用_Java 代码复用(组合与继承)

    java中的类都是围绕着类进行的.可以通过创建新类来复用代码,而不必从头编写.可以使用别人已经开发并调试好的类.此方法使用的窍门在于使用类而不破坏现有的程序代码.达到这一目的的方法有两种: 第一种方法 ...

最新文章

  1. 管理层如何做好目标管理?战略目标拆解是核心!
  2. 华为 日志服务器 配置文件,配置日志服务器
  3. [译]yield关键字都做了什么?
  4. Android服务部分总结
  5. 机器学习 深度学习 ai_人工智能,机器学习,深度学习-特征和差异
  6. 云服务器主机性能测试,云服务器主机性能测试
  7. Web前端笔记-圆环随时间逐渐缩小(使用two.js)
  8. c语言填空题题库6,二级C语言题库-填空题.doc
  9. 3星难度-算式填符号
  10. VDI序曲三十 APP-V4.6SP1之OFFICE07补丁升级
  11. python决策树分类案例_银行产品销售案例与决策树分类算法
  12. 【Python-2.7】多种方式删除列表元素
  13. 卷积与反卷积、步长(stride)与重叠(overlap)及 output 的大小
  14. LintCode2016年8月8日算法比赛----子树
  15. 64位电脑 装32位oracle,64位Windows可以安装32位的Oracle吗
  16. Excel之分类汇总,定位,组合
  17. Android学生信息管理系统
  18. ORACLE学习笔记-CentOS 7.2 Oracle 12C R2安装部署
  19. cgb2007-京淘day16
  20. 《华尔街》观后笔记9——拯救危机

热门文章

  1. Lambda 构造方法引用 -- 类名::new
  2. springboot网吧管理系统
  3. 未来的无盘网吧是什么样子?
  4. android:手机与BLE-CC41-A蓝牙模块通信
  5. Redis启动窗口一闪就关
  6. Distantly Supervised Named Entity Recognition using Positive-Unlabeled Learning(DS——NER识别(减少人工参与))
  7. 解决微信小程序RangeError: WebAssembly.instantiate(): Out of memory: wasm memory内存不足问题
  8. 记一次npm login失败的经历(npm WARN Username...)
  9. SpringMVC的工作原理图
  10. 点云配准方法原理(NDT、ICP)