📄 tigerframe.java
字号:
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 + -