java代码生成器原理 java代码生成器推荐

java代码生成器能生成c语言代码吗?用什么方法能实现呢?按照我的理解 , 可以的 , 代码生成器是跨平台,而且是跨语言的(至少是跨文本语言的,UML暂时不好说,) 。
代码生成器作为一种开发工具 , 一般不直接作为程序的一部分,通常也不直接或间接(如通过AOP)被程序调用,他是通过编程的方式生成所需要的代码 , 然后将生成的代码作为源文件,复制到开发工具的代码区,然后进行编译 。由于代码生成器是在编译之前运行的,因此它可以跨语言,你不但可以用代码生成器生成高级语言 , 也可以生成汇编语言,甚至机器码(0、1代码) 。
但编写代码生成器是一个难点,它需要你了解目标编程语言的语法 。如果别人已经把你需要的代码生成器写好了,你只需按要求使用即可 , 此时就不需要了解目标编程语言的语法 。
JNI是通过Java调用C语言(或其他语言,一般是C),它的实现机制与代码生成器不同(JNI是通过代码调用实现功能,而代码生成器是生成代码,复制代码进行使用),由于C是底层语言,一些底层操作单靠Java无法实现,所以才需要JNI 。
以上是我对代码生成器的个人理解,虽然提问时间已过了很久,但依然希望能对你及其他网友有所帮助 。
java代码生成器是什么代码生成器就是根据特定的要求制定格式 , 灵活输出在项目中重复要用到的代码,节省项目时间,现在免费的代码生成器codesmith我经常用的,小玩意,不花钱
Java代码到底是如何编译成机器指令的编译器把一种语言规范转化为另一种语言规范java代码生成器原理的这个过程需要哪些步骤java代码生成器原理?回答这个问题需要参照《编译原理》java代码生成器原理,总结过程如下java代码生成器原理:
1)词法分析:读取源代码 , 一个字节一个字节的读进来,找出这些词法中我们定义的语言关键词如:if、else、while等,识别哪些if是合法的哪些是不合法的 。这个步骤就是词法分析过程 。
词法分析的结果:就是从源代码中找出java代码生成器原理了一些规范化的token流,就像人类语言中,给你一句话你要分辨出哪些是一个词语 , 哪些是标点符号,哪些是动词,哪些是名词 。
2)语法分析:就是对词法分析中得到的token流进行语法分析,这一步就是检查这些关键词组合在一起是不是符合Java语言规范 。如if的后面是不是紧跟着一个布尔型判断表达式 。
语法分析的结果:就是形成一个符合Java语言规定的抽象语法树 , 抽象语法树是一个结构化的语法表达形式,它的作用是把语言的主要词法用一个结构化的形式组织在一起 。这棵语法树可以被后面按照新的规则再重新组织 。
3)语义分析:语法分析完成之后也就不存在语法问题了,语义分析的主要工作就是把一些难懂的,复杂的语法转化成更简单的语法 。就如难懂的文言文转化为大家都懂的百话文 , 或者是注释一下一些不懂的成语 。
语义分析结果:就是将复杂的语法转化为简单的语法,对应到Java就是将foreach转化为for循环 , 还有一些注释等 。最后生成一棵抽象的语法树 , 这棵语法树也就更接近目标语言的语法规则 。
4)字节码生成:将会根据经过注释的抽象语法树生成字节码,也就是将一个数据结构转化为另外一个数据结构 。就像将所有的中文词语翻译成英文单词后按照英文语法组装文英文语句 。代码生成器的结果就是生成符合java虚拟机规范的字节码 。
java代码生成器怎么用zip包java代码生成器原理,然后自动下载下来
1.预先定义好模板
2.界面输入相关参数
3.解析模板生成代码并下载
最后放出源代码:
package com.et.controller.system.createcode;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.et.controller.base.BaseController;
import com.et.util.DelAllFile;
import com.et.util.FileDownload;
import com.et.util.FileZip;
import com.et.util.Freemarker;
import com.et.util.PageData;
import com.et.util.PathUtil;
/**
* 类名称:FreemarkerController
* 创建人:Harries
* 创建时间:2015年1月12日
* @version
*/
@Controller
@RequestMapping(value=https://www.04ip.com/post/”/createCode”)
public class CreateCodeController extends BaseController {
/**
* 生成代码
*/
@RequestMapping(value=https://www.04ip.com/post/”/proCode”)
public void proCode(HttpServletResponse response) throws Exception{
PageData pd = new PageData();
pd = this.getPageData();
/* ============================================================================================= */
String packageName = pd.getString(“packageName”); //包名 ========1
String objectName = pd.getString(“objectName”); //类名 ========2
String tabletop = pd.getString(“tabletop”); //表前缀 ========3
tabletop = null == tabletop?””:tabletop.toUpperCase(); //表前缀转大写
String zindext = pd.getString(“zindex”); //属性总数
int zindex = 0;
if(null != zindext!””.equals(zindext)){
zindex = Integer.parseInt(zindext);
}
ListString[] fieldList = new ArrayListString[](); //属性集合 ========4
for(int i=0; i zindex; i){
fieldList.add(pd.getString(“field” i).split(“,fh,”)); //属性放到集合里面
}
MapString,Object root = new HashMapString,Object(); //创建数据模型
root.put(“fieldList”, fieldList);
root.put(“packageName”, packageName); //包名
root.put(“objectName”, objectName); //类名
root.put(“objectNameLower”, objectName.toLowerCase()); //类名(全小写)
root.put(“objectNameUpper”, objectName.toUpperCase()); //类名(全大写)
root.put(“tabletop”, tabletop); //表前缀
root.put(“nowDate”, new Date()); //当前日期
DelAllFile.delFolder(PathUtil.getClasspath() ”admin/ftl”); //生成代码前,先清空之前生成java代码生成器原理的代码
/* ============================================================================================= */
String filePath = “admin/ftl/code/”; //存放路径
String ftlPath = “createCode”; //ftl路径
/*生成controller*/
Freemarker.printFile(“controllerTemplate.ftl”, root, “controller/” packageName ”/” objectName.toLowerCase() ”/” objectName ”Controller.java”, filePath, ftlPath);
/*生成service*/
Freemarker.printFile(“serviceTemplate.ftl”, root, “service/” packageName ”/” objectName.toLowerCase() ”/” objectName ”Service.java”, filePath, ftlPath);
/*生成mybatis xml*/
Freemarker.printFile(“mapperMysqlTemplate.ftl”, root, “mybatis_mysql/” packageName ”/” objectName ”Mapper.xml”, filePath, ftlPath);
Freemarker.printFile(“mapperOracleTemplate.ftl”, root, “mybatis_oracle/” packageName ”/” objectName ”Mapper.xml”, filePath, ftlPath);
/*生成SQL脚本*/
Freemarker.printFile(“mysql_SQL_Template.ftl”, root, “mysql数据库脚本/” tabletop objectName.toUpperCase() ”.sql”, filePath, ftlPath);
Freemarker.printFile(“oracle_SQL_Template.ftl”, root, “oracle数据库脚本/” tabletop objectName.toUpperCase() ”.sql”, filePath, ftlPath);
/*生成jsp页面*/
Freemarker.printFile(“jsp_list_Template.ftl”, root, “jsp/” packageName ”/” objectName.toLowerCase() ”/” objectName.toLowerCase() ”_list.jsp”, filePath, ftlPath);
Freemarker.printFile(“jsp_edit_Template.ftl”, root, “jsp/” packageName ”/” objectName.toLowerCase() ”/” objectName.toLowerCase() ”_edit.jsp”, filePath, ftlPath);
/*生成说明文档*/
Freemarker.printFile(“docTemplate.ftl”, root, “说明.doc”, filePath, ftlPath);
//this.print(“oracle_SQL_Template.ftl”, root); 控制台打印
/*生成java代码生成器原理的全部代码压缩成zip文件*/
FileZip.zip(PathUtil.getClasspath() ”admin/ftl/code”, PathUtil.getClasspath() ”admin/ftl/code.zip”);
/*下载代码*/
FileDownload.fileDownload(response, PathUtil.getClasspath() ”admin/ftl/code.zip”, “code.zip”);
}
}
很多公司开发的java代码,jsp,js都是通过工具自动生成的如ant等自动化开发工具,我用过,比较著名的有普元,浪潮楼上平台等 。
首先,我要纠正下,ANT并不是自动生成代码用的工具;
那些所谓的自动代码生成器根本原理就是根据实现写事先好的模板,再根据你提供的数据库结构,生成一系列的增删改查方法 。的确是可以减少程序员的工作量 , 但是不能包含复杂或者特殊的业务逻辑,否则程序员全都失业了 。
【java代码生成器原理 java代码生成器推荐】java代码生成器原理的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于java代码生成器推荐、java代码生成器原理的信息别忘了在本站进行查找喔 。

    推荐阅读