java代码创建编译器,自制java编译器

用java做一个java的编译器

1. 下载

我们提供的服务有:成都做网站、网站制作、微信公众号开发、网站优化、网站认证、辽宁ssl等。为上千余家企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的辽宁网站制作公司

在GCC网站上()或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为 3.4.0。可供下载的文件一般有两种形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。

2. 解压缩

根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符):

% tar xzvf gcc-3.4.0.tar.gz

或者

% bzcat gcc-3.4.0.tar.bz2 | tar xvf -

新生成的gcc-3.4.0这个目录被称为源目录,用${srcdir}表示它。以后在出现${srcdir}的地方,应该用真实的路径来替换它。用pwd命令可以查看当前路径。

在${srcdir}/INSTALL目录下有详细的GCC安装说明,可用浏览器打开index.html阅读。

3. 建立目标目录

目标目录(用${objdir}表示)是用来存放编译结果的地方。GCC建议编译后的文件不要放在源目录${srcdir]中(虽然这样做也可以),最好单独存放在另外一个目录中,而且不能是${srcdir}的子目录。

例如,可以这样建立一个叫 gcc-build 的目标目录(与源目录${srcdir}是同级目录):

% mkdir gcc-build

% cd gcc-build

以下的操作主要是在目标目录 ${objdir} 下进行。

4. 配置

配置的目的是决定将GCC编译器安装到什么地方(${destdir}),支持什么语言以及指定其它一些选项等。其中,${destdir}不能与${objdir}或${srcdir}目录相同。

配置是通过执行${srcdir}下的configure来完成的。其命令格式为(记得用你的真实路径替换${destdir}):

% ${srcdir}/configure --prefix=${destdir} [其它选项]

例如,如果想将GCC 3.4.0安装到/usr/local/gcc-3.4.0目录下,则${destdir}就表示这个路径。

在我的机器上,我是这样配置的:

% ../gcc-3.4.0/configure --prefix=/usr/local/gcc-3.4.0 --enable-threads=posix --disable-checking --enable--long-long --host=i386-redhat-linux --with-system-zlib --enable-languages=c,c++,java

将GCC安装在/usr/local/gcc-3.4.0目录下,支持C/C++和JAVA语言,其它选项参见GCC提供的帮助说明。

5. 编译

% make

这是一个漫长的过程。在我的机器上(P4-1.6),这个过程用了50多分钟。

6. 安装

执行下面的命令将编译好的库文件等拷贝到${destdir}目录中(根据你设定的路径,可能需要管理员的权限):

% make install

至此,GCC 3.4.0安装过程就完成了。

6. 其它设置

GCC 3.4.0的所有文件,包括命令文件(如gcc、g++)、库文件等都在${destdir}目录下分别存放,如命令文件放在bin目录下、库文件在lib下、头文件在include下等。由于命令文件和库文件所在的目录还没有包含在相应的搜索路径内,所以必须要作适当的设置之后编译器才能顺利地找到并使用它们。

6.1 gcc、g++、gcj的设置

要想使用GCC 3.4.0的gcc等命令,简单的方法就是把它的路径${destdir}/bin放在环境变量PATH中。我不用这种方式,而是用符号连接的方式实现,这样做的好处是我仍然可以使用系统上原来的旧版本的GCC编译器。

首先,查看原来的gcc所在的路径:

% which gcc

在我的系统上,上述命令显示:/usr/bin/gcc。因此,原来的gcc命令在/usr/bin目录下。我们可以把GCC 3.4.0中的gcc、g++、gcj等命令在/usr/bin目录下分别做一个符号连接:

% cd /usr/bin

% ln -s ${destdir}/bin/gcc gcc34

% ln -s ${destdir}/bin/g++ g++34

% ln -s ${destdir}/bin/gcj gcj34

这样,就可以分别使用gcc34、g++34、gcj34来调用GCC 3.4.0的gcc、g++、gcj完成对C、C++、JAVA程序的编译了。同时,仍然能够使用旧版本的GCC编译器中的gcc、g++等命令。

6.2 库路径的设置

将${destdir}/lib路径添加到环境变量LD_LIBRARY_PATH中,最好添加到系统的配置文件中,这样就不必要每次都设置这个环境变量了。

例如,如果GCC 3.4.0安装在/usr/local/gcc-3.4.0目录下,在RH Linux下可以直接在命令行上执行或者在文件/etc/profile中添加下面一句:

setenv LD_LIBRARY_PATH /usr/local/gcc-3.4.0/lib:$LD_LIBRARY_PATH

7. 测试

用新的编译命令(gcc34、g++34等)编译你以前的C、C++程序,检验新安装的GCC编译器是否能正常工作。

8. 根据需要,可以删除或者保留${srcdir}和${objdir}目录。

如果用的是ubuntu或者是fedora的话 可以在源里直接安装

java语言如何编写程序?

如下:

(1) 一个Java语言开发工具包(Java Devekopment Kit),其中包括Java 编译器和Java运行环境。

(2) 一份Java语言API文档,目前版本的Java语言API文档同样可以免费。

(3) 一个Java语言集成开发环境,能够在其中编辑Java代码,并且进行编译与调试。推荐使用的集成开发环境是JCreator。

建议去找老师让老师 带你做 项目 我这几天正在做的 感觉收获好多的 上课学到的东西其实更本就不够用的 只有实践了 你才能知道自己的差距

用java做文本编译器

给你个简单的记事本代码,自己看着修改吧!

package com.csk.notepad;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import javax.swing.*;

public class MyNotepad implements ActionListener {

private JFrame frame = new JFrame("Notepad By ChenXiaoKang");

private JTextArea jta = new JTextArea();

private String result = "";

private boolean flag = true;

private File f;

private JButton jb = new JButton("开始");

private JTextField jtf = new JTextField(15);

private JTextField jt = new JTextField(15);

private JButton jbt = new JButton("替换为");

private JButton jba = new JButton("全部替换");

private Icon ic = new ImageIcon("D:\\java课堂笔记\\GUI\\11.gif");

private String value;

private int start = 0;

private JFrame jf = new JFrame("查找");

private JFrame jfc = new JFrame("替换");

@Override

public void actionPerformed(ActionEvent e) {

String comm = e.getActionCommand();

if ("新建".equals(comm)) {

if (!(frame.getTitle().equals("新记事本"))) {

if (!flag) {

write();

newNew();

} else {

JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");

int returnVal = jfc.showDialog(null, "保存为");

if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性

f = jfc.getSelectedFile();

flag = false;

write();

}

}

} else if (!(jta.getText().isEmpty())) {

JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");

int returnVal = jfc.showDialog(null, "保存为");

if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性

f = jfc.getSelectedFile();

flag = false;

write();

newNew();

}

} else {

newNew();

}

} else if ("打开".equals(comm)) {

JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");

jfc.setDialogType(JFileChooser.OPEN_DIALOG);

int returnVal = jfc.showOpenDialog(null);

if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性

f = jfc.getSelectedFile();

frame.setTitle(f.getName());

result = read();

flag = false;

value = result;

jta.setText(result);

}

} else if ("保存".equals(comm)) {

JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");

if (flag) {

int returnVal = jfc.showDialog(null, "保存为");

if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性

f = jfc.getSelectedFile();

flag = false;

write();

}

} else {

write();

}

} else if ("另存".equals(comm)) {

JFileChooser jfc = new JFileChooser("D:\\java课堂笔记");

int returnVal = jfc.showDialog(null, "另存");

if (returnVal == JFileChooser.APPROVE_OPTION) {// 选择文件后再执行下面的语句,保证了程序的健壮性

f = jfc.getSelectedFile();

write();

}

} else if ("退出".equals(comm)) {

System.exit(0);

} else if ("撤销".equals(comm)) {

jta.setText(value);

} else if ("剪切".equals(comm)) {

value = jta.getText();

jta.cut();

} else if ("复制".equals(comm)) {

jta.copy();

} else if ("粘贴".equals(comm)) {

value = jta.getText();

jta.paste();

} else if ("删除".equals(comm)) {

value = jta.getText();

jta.replaceSelection(null);

} else if ("全选".equals(comm)) {

jta.selectAll();

} else if ("查找".equals(comm)) {

value = jta.getText();

jf.add(jtf, BorderLayout.CENTER);

jf.add(jb, BorderLayout.SOUTH);

jf.setLocation(300, 300);

jf.pack();

jf.setVisible(true);

jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

} else if ("替换".equals(comm)) {

value = jta.getText();

GridLayout gl = new GridLayout(3, 3);

JLabel jl1 = new JLabel("查找内容:");

JLabel jl2 = new JLabel("替换为:");

jfc.setLayout(gl);

jfc.add(jl1);

jfc.add(jtf);

jfc.add(jb);

jfc.add(jl2);

jfc.add(jt);

jfc.add(jbt);

JLabel jl3 = new JLabel();

JLabel jl4 = new JLabel();

jfc.add(jl3);

jfc.add(jl4);

jfc.add(jba);

jfc.setLocation(300, 300);

jfc.pack();

jfc.setVisible(true);

jfc.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

} else if ("版本".equals(comm)) {

JDialog jd = new JDialog(frame, "关于对话框");

jd.setSize(200, 200);

JLabel l = new JLabel("哈哈哈哈哈哈哈哈哈哈呵呵呵呵呵呵呵呵呵呵呵呵呵");

jd.add(l, BorderLayout.CENTER);

jd.setLocation(100, 200);

jd.setSize(300, 300);

jd.setVisible(true);

// jd.pack();

jd.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);

} else if ("开始".equals(comm) || "下一个".equals(comm)) {

String temp = jtf.getText();

int s = value.indexOf(temp, start);

if (value.indexOf(temp, start) != -1) {

jta.setSelectionStart(s);

jta.setSelectionEnd(s + temp.length());

jta.setSelectedTextColor(Color.GREEN);

start = s + 1;

jb.setText("下一个");

// value=value.substring(s+temp.length());//不能截取字串

} else {

JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic);

jf.dispose();

}

} else if ("替换为".equals(comm)) {

String temp = jtf.getText();

int s = value.indexOf(temp, start);

if (value.indexOf(temp, start) != -1) {

jta.setSelectionStart(s);

jta.setSelectionEnd(s + temp.length());

jta.setSelectedTextColor(Color.GREEN);

start = s + 1;

jta.replaceSelection(jt.getText());

} else {

JOptionPane.showMessageDialog(jf, "查找完毕!", "提示", 0, ic);

jf.dispose();

}

} else if ("全部替换".equals(comm)) {

String temp = jta.getText();

temp = temp.replaceAll(jtf.getText(), jt.getText());

jta.setText(temp);

}

}

public String read() {

String temp = "";

try {

FileInputStream fis = new FileInputStream(f.getAbsolutePath());

byte[] b = new byte[1024];

while (true) {

int num = fis.read(b);

if (num == -1)

break;

temp = temp + new String(b, 0, num);

}

fis.close();

} catch (Exception e1) {

e1.printStackTrace();

}

return temp;

}

public void write() {

try {

FileOutputStream fos = new FileOutputStream(f);

fos.write(jta.getText().getBytes());

fos.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public void newNew() {

frame.dispose();

new MyNotepad();

flag = true;

}

public MyNotepad() {

JMenuBar jmb = new JMenuBar();

String[] menuLab = { "文件", "编辑", "帮助" };

String[][] menuItemLab = { { "新建", "打开", "保存", "另存", "退出" },

{ "撤销", "剪切", "复制", "粘贴", "删除", "全选", "查找", "替换" }, { "版本" } };

for (int i = 0; i menuLab.length; i++) {

JMenu menu = new JMenu(menuLab[i]);

jmb.add(menu);

for (int j = 0; j menuItemLab[i].length; j++) {

JMenuItem jmi = new JMenuItem(menuItemLab[i][j]);

menu.add(jmi);

jmi.addActionListener(this);

}

}

frame.setJMenuBar(jmb);

jta.setLineWrap(true);// 自动换行

JScrollPane jsp = new JScrollPane(jta);// 滚动窗口面板

frame.add(jsp);

jb.addActionListener(this);

jbt.addActionListener(this);

jba.addActionListener(this);

frame.setLocation(200, 50);

frame.setSize(620, 660);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public static void main(String[] args) {

new MyNotepad();

}

}


当前名称:java代码创建编译器,自制java编译器
网站URL:http://ybzwz.com/article/hshehg.html