⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tigerframe.java

📁 tiger编译器的Java实现
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		if (!Config.initialed)
			Config.readConfig();
		StyleConstants.setForeground(COMM, GUI.Constants.comm_color);
		StyleConstants.setFontFamily(COMM, GUI.Constants.font);
		StyleConstants.setFontSize(COMM, GUI.Constants.fontsize);

		StyleConstants.setForeground(KEY, GUI.Constants.key_color);
		StyleConstants.setBold(KEY, true);
		StyleConstants.setFontFamily(KEY, GUI.Constants.font);
		StyleConstants.setFontSize(KEY, GUI.Constants.fontsize);

		StyleConstants.setForeground(BLACK, GUI.Constants.normal_color);
		StyleConstants.setFontFamily(BLACK, GUI.Constants.font);
		StyleConstants.setFontSize(BLACK, GUI.Constants.fontsize);

		StyleConstants.setForeground(STRING, GUI.Constants.string_color);
		StyleConstants.setItalic(STRING, true);
		StyleConstants.setFontFamily(STRING, GUI.Constants.font);
		StyleConstants.setFontSize(STRING, GUI.Constants.fontsize);
	}

	protected void insertText(String text, AttributeSet set) {
		try {
			String re = text.replaceAll("\r\n", "\n");
			textArea.getDocument().insertString(
					textArea.getDocument().getLength(), re, set);
		} catch (BadLocationException e) {
			JOptionPane.showMessageDialog(null, "text display error :"
					+ e.getMessage(), "error", JOptionPane.ERROR_MESSAGE);
		}
	}

	protected void colorText() {
		ErrorMsg.ErrorMsg errorMsg = new ErrorMsg.ErrorMsg(filename, null);
		try {

			int begin = 0;
			String temp = "";
			text = textArea.getText();
			textArea.setText("");

			Lexer m_lexer = new Yylex(new StringReader(text), errorMsg);
			Parse.Token tok;

			do {
				tok = (Token) m_lexer.nextToken();

				if (GUI.Config.keys.containsKey(new Integer(tok.sym))) {
					if (tok.sym == sym.ID) {
						String lkey = text.substring(tok.left, tok.right);
						if (GUI.Config.ids.containsKey(lkey)) {
							temp = text.substring(begin, tok.left);
							insertText(temp, BLACK);

							insertText(lkey, KEY);
							begin = tok.right;
						}
					} else if (tok.sym == sym.STRING) {
						temp = text.substring(begin, tok.left);
						insertText(temp, BLACK);
						insertText(text.substring(tok.left, tok.right), STRING);
						begin = tok.right;
					} else if (tok.sym == sym.COMM) {

						temp = text.substring(begin, tok.left);
						insertText(temp, BLACK);

						temp = text.substring(tok.left, tok.right);
						insertText(temp, COMM);
						begin = tok.right;
					} else {
						String lkey = text.substring(tok.left, tok.right);
						temp = text.substring(begin, tok.left);
						insertText(temp, BLACK);

						insertText(lkey, KEY);

						begin = tok.left + lkey.length();
					}
				}
			} while (tok.sym != sym.EOF);

			if (tok.getValue() != null && begin < text.length()) {
				int left, i;
				String s = (String) tok.getValue();
				if ((i = s.indexOf('_')) != -1) {
					left = Integer.parseInt(s.substring(0, i));
					if (s.substring(i + 1, s.length()).equals("STRING")) {
						temp = text.substring(begin, left);
						insertText(temp, BLACK);
						insertText(text.substring(left, tok.right), STRING);
						begin = tok.right;
					} else if (s.substring(i + 1, s.length()).equals("COMM")) {
						temp = text.substring(begin, left);
						insertText(temp, BLACK);

						temp = text.substring(left, tok.right);
						insertText(temp, COMM);
						begin = tok.right;
					}
				}
			}
			if (begin < text.length()) {
				temp = text.substring(begin, text.length());
				insertText(temp, BLACK);
			}

		} catch (FileNotFoundException e) {

			JOptionPane.showMessageDialog(null, "Open file error :"
					+ e.getMessage(), "error", JOptionPane.ERROR_MESSAGE);
			// e.printStackTrace();
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Read file error :"
					+ e.getMessage(), "error", JOptionPane.ERROR_MESSAGE);
			// e.printStackTrace();
		}
	}

	protected void build() {
		ErrorMsg.ErrorMsg errorMsg = new ErrorMsg.ErrorMsg(filename, this);
		java.io.InputStream inp = null;

		// /////////////////////////
		this.clearErrList();
		// ///////////////////////////////////
		try {

			inp = new java.io.FileInputStream(filepath);

			Grm parser = new Grm(new Yylex(inp, errorMsg), errorMsg);

			File file = new File(filepath);

			file = new File(file.getParent() + File.separator
					+ file.getName().substring(0, file.getName().length() - 4)
					+ ".abs");
			// System.out.println(file.getAbsolutePath());
			java.io.FileOutputStream ost = new java.io.FileOutputStream(file);
			// file=new File();
			Absyn.Print printer = new Absyn.Print(new java.io.PrintStream(ost));
			Absyn.Exp value = (Absyn.Exp) (parser./* debug_ */parse().value);
			printer.prExp(value, 1);
			Semant.Semant s = new Semant.Semant(new ErrorMsg.ErrorMsg(filename,
					this), textArea.getText());
			s.transExp(value);

			DefaultMutableTreeNode node = (DefaultMutableTreeNode) parser
					.getRe().getRoot();
			DefaultTreeModel model = new DefaultTreeModel(node);
			tree.setModel(model);

			ost.close();
		} catch (Exception e) {
			// Auto-generated catch block
			System.out.println("find an error in tiger resource file!");
			tree.setModel(null);
			// e.printStackTrace();
		} finally {
			try {
				inp.close();
				// ////////////////////////////////////////////////
				addTail();
				// /////////////////////////////////
			} catch (java.io.IOException e) {
			}
		}

	}

	protected void errorMouseCilcked(int index) {
		if (index >= 0 && index < errorlist.getModel().getSize()) {

			DefaultListModel def = (DefaultListModel) errorlist.getModel();
			Error e = (Error) def.get(index);
			if (e.getLine() >= 0) {
				text = textArea.getText();
				int begin = 0, end = 0;
				int count = 0, i;
				for (i = 0; i < text.length(); i++) {
					if (text.charAt(i) == '\n') {
						count++;
						if (count == e.getLine() - 1)
							begin = i + 1;

						if (count == e.getLine()) {
							end = i;
							break;
						}
					}
				}

				textArea.setSelectionStart(begin);
				textArea.setSelectionEnd(end);
				textArea.requestFocus();
			}
		}
	}

	public int errNum = 0;

	public void clearErrList() {

		errNum = 0;
		if (errorlist.getModel().getSize() > 0) {
			errorlist.removeAll();
			errorlist.setModel(new DefaultListModel());
			errorlist.revalidate();
			errorlist.repaint();
		}
	}

	public void clearModel() {
		if (errorlist.getModel().getSize() > 0) {
			errorlist.removeAll();
			errorlist.setModel(new DefaultListModel());
			errorlist.revalidate();
			errorlist.repaint();
		}
	}

	public void addTail() {
		DefaultListModel def = new DefaultListModel();
		for (int i = 0; i < errorlist.getModel().getSize(); i++)
			def.addElement(errorlist.getModel().getElementAt(i));

		if (errNum > 0) {
			Error e = new Error(-1,
					"error  end ***********************************");
			def.addElement(e);
		}
		Error e = new Error(-1, errNum + " errors");
		def.addElement(e);

		clearModel();
		errorlist.setModel(def);
	}

	public void printErr(String s) {
		// Auto-generated method stub
		DefaultListModel def = new DefaultListModel();
		for (int i = 0; i < errorlist.getModel().getSize(); i++)
			def.addElement(errorlist.getModel().getElementAt(i));

		errNum++;
		Error e = new Error(-2, "Error " + errNum + ": " + s);
		def.addElement(e);

		clearModel();
		errorlist.setModel(def);
	}

	public void printErr(int s) {
		// Auto-generated method stub
		printErr("" + s);
	}

	public void printMes(String s) {
		// Auto-generated method stub
		DefaultListModel def = new DefaultListModel();
		for (int i = 0; i < errorlist.getModel().getSize(); i++)
			def.addElement(errorlist.getModel().getElementAt(i));

		Error e = new Error(-1, "Message: " + s);
		def.addElement(e);

		clearModel();
		errorlist.setModel(def);
	}

	public void printMes(int s) {
		// Auto-generated method stub
		printErr("" + s);
	}

	public void printErr(Error s) {
		// Auto-generated method stub
		DefaultListModel def = new DefaultListModel();
		for (int i = 0; i < errorlist.getModel().getSize(); i++)
			def.addElement(errorlist.getModel().getElementAt(i));

		errNum++;
		Error n = s;
		n.setErr(errNum + ": Line: " + s.getLine() + " " + s.getErr());
		def.addElement(n);

		clearModel();
		errorlist.setModel(def);
	}
}

class ErrorListCellRenderer extends JLabel implements ListCellRenderer {

	private static final long serialVersionUID = 1L;

	final static ImageIcon errorIcon = new ImageIcon(GUI.Constants.error_img);

	final static ImageIcon warnigIcon = new ImageIcon(GUI.Constants.warning_img);

	// This is the only method defined by ListCellRenderer.
	// We just reconfigure the JLabel each time we're called.
	ErrorListCellRenderer() {
		this.setOpaque(true);
	}

	public Component getListCellRendererComponent(JList list, Object value, // value
			int index, // cell index
			boolean isSelected, // is the cell selected
			boolean cellHasFocus) // the list and the cell have the focus
	{
		if (value != null) {
			setText(((Error) value).getErr());
			if (index >= 0 && index < list.getModel().getSize()) {
				{
					Error e = (Error) list.getModel().getElementAt(index);
					if (e.getLine() != -1)
						setIcon(errorIcon);
					else
						setIcon(null);
				}

			}
		}
		if (isSelected) {
			setBackground(list.getSelectionBackground());
			setForeground(list.getSelectionForeground());
		} else {
			setBackground(list.getBackground());
			setForeground(list.getForeground());
		}
		return this;
	}

}

class tigFileFilter extends javax.swing.filechooser.FileFilter {
	String ex = "";

	public boolean accept(File arg0) {
		// Auto-generated method stub
		if (arg0.isDirectory())
			return true;

		String name = arg0.getName();
		int index = name.indexOf(".");
		if (index > 0 && index < name.length() - 1) {
			ex = name.substring(index + 1, name.length());
			if (ex.equals("tig") || ex.equals("java"))
				return true;
		}
		return false;
	}

	public String getDescription() {
		return "text file(*.tig;*.java)";

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -