diff --git a/samples/Exemplo1.lms b/samples/Exemplo1.lms index bb33f09..b3f0332 100644 --- a/samples/Exemplo1.lms +++ b/samples/Exemplo1.lms @@ -5,7 +5,7 @@ var var a :integer; begin - a:=2000; + a:=200000; readln(a); if a=x then z:=z+x @@ -13,7 +13,7 @@ var z:=z-x; call p; end; - (* comentario integer *) + (* comentario integer .*) end; begin z:=0; @@ -25,4 +25,5 @@ begin writeln(z); end. + diff --git a/samples/Exemplo2.lms b/samples/Exemplo2.lms index 1e25777..42f3ab4 100644 --- a/samples/Exemplo2.lms +++ b/samples/Exemplo2.lms @@ -11,13 +11,13 @@ PROGRAM TESTE123; array_a : ARRAY[0..20] OF INTEGER; array_b, array_c, array_d : ARRAY[0..1000] OF INTEGER; - (*Declaração de procedure, inicia novo bloco*) + (*Declarao de procedure, inicia novo bloco*) PROCEDURE p_teste(idd : INTEGER); LABEL label_a, label_b; CONST - (*A constante não aceita valores negativos*) + (*A constante no aceita valores negativos*) a = 100; b = 200; @@ -30,15 +30,10 @@ PROGRAM TESTE123; END; -(* - - Início do bloco principal - - Verificar, porque em alguns casos não é exigido o ; no final da expressão. -*) - BEGIN x := 150; begin - x := 20; + x := 20000; end; (*Chama a procedure*) @@ -78,3 +73,12 @@ BEGIN 30 : BEGIN END END; END. + + + + + + + + + diff --git a/src/net/unesc/hal/compiler/Lexicon.java b/src/net/unesc/hal/compiler/Lexicon.java index 4d43724..25a5e9b 100644 --- a/src/net/unesc/hal/compiler/Lexicon.java +++ b/src/net/unesc/hal/compiler/Lexicon.java @@ -226,6 +226,8 @@ private void run() { } if (is_comment_loop || is_literal_loop) { literal_count++; + if(cur_char != null) + System.out.println(cur_char.getChar()); cur_char = chars.get(++car); buffer.clear(); } diff --git a/src/net/unesc/hal/compiler/Syntactic.java b/src/net/unesc/hal/compiler/Syntactic.java index 246f08b..e3fd693 100644 --- a/src/net/unesc/hal/compiler/Syntactic.java +++ b/src/net/unesc/hal/compiler/Syntactic.java @@ -115,7 +115,7 @@ private void run() { // Busca a derivação correspondente aos códigos public ArrayList getParsing(int c1, int c2) { - System.out.println(c1 + "|" + c2); + //System.out.println(c1 + "|" + c2); String der = parsing.get(c1 + "|" + c2); ArrayList derivation; if (der != null) { diff --git a/src/net/unesc/hal/data/Char.java b/src/net/unesc/hal/data/Char.java index 29ee8b0..5902014 100644 --- a/src/net/unesc/hal/data/Char.java +++ b/src/net/unesc/hal/data/Char.java @@ -69,7 +69,7 @@ public void setEndFile(boolean value){ @Override public String toString() { - return character.toString(); + return (character != null) ? character.toString() : ""; } public boolean isSymbol() { diff --git a/src/net/unesc/hal/languages/HAL.java b/src/net/unesc/hal/languages/HAL.java index 8b7628d..7a59b2f 100644 --- a/src/net/unesc/hal/languages/HAL.java +++ b/src/net/unesc/hal/languages/HAL.java @@ -1,10 +1,8 @@ package net.unesc.hal.languages; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.Map; -import java.util.Set; import net.unesc.hal.data.Token; public class HAL implements Language { diff --git a/src/net/unesc/hal/resources/check.png b/src/net/unesc/hal/resources/check.png new file mode 100755 index 0000000..105c4a9 Binary files /dev/null and b/src/net/unesc/hal/resources/check.png differ diff --git a/src/net/unesc/hal/utils/File.java b/src/net/unesc/hal/utils/File.java index ef1ddd9..de6f678 100644 --- a/src/net/unesc/hal/utils/File.java +++ b/src/net/unesc/hal/utils/File.java @@ -1,6 +1,5 @@ package net.unesc.hal.utils; -import java.awt.Component; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; @@ -38,7 +37,7 @@ public static String write(String str, Editor comp, String path) throws FileNotF arq = new FileOutputStream(f); try { - ps = new PrintStream(arq); + ps = new PrintStream(arq, true, "UTF-8"); ps.println(str); return path; diff --git a/src/net/unesc/hal/views/Editor.form b/src/net/unesc/hal/views/Editor.form index dec5381..65b6a69 100644 --- a/src/net/unesc/hal/views/Editor.form +++ b/src/net/unesc/hal/views/Editor.form @@ -524,11 +524,11 @@ - + - + - + @@ -551,7 +551,7 @@ - + @@ -566,8 +566,11 @@ + + + - + @@ -580,7 +583,9 @@ + + diff --git a/src/net/unesc/hal/views/Editor.java b/src/net/unesc/hal/views/Editor.java index 88e41f3..162a2c4 100644 --- a/src/net/unesc/hal/views/Editor.java +++ b/src/net/unesc/hal/views/Editor.java @@ -22,151 +22,156 @@ * @author Mateus Generoso */ public class Editor extends javax.swing.JFrame { - + public static final String SAVE = "SALVAR"; public static final String OPEN = "ABRIR"; public static final String CLOSE = "FECHAR"; public static final String NEW = "NOVO"; public static final String RUN = "EXECUTAR"; public static final String ABOUT = "SOBRE"; - + private FiniteAutomaton fa; private String latestVersionCode = ""; private boolean unsaved = false; private String path = ""; - + public Editor() { initComponents(); initEditor(); initListener(); } - - public FiniteAutomaton getFiniteAutomaton(){ + + public FiniteAutomaton getFiniteAutomaton() { return fa; } - - public String getPath(){ + + public String getPath() { return this.path; } - - public void setPath(String path){ + + public void setPath(String path) { this.path = path; updateLatestVersion(fieldEditor.getText()); } - + public Source getSource() { return new Source(fieldEditor.getText()); } - - public void setSource(String value){ + + public void setSource(String value) { fieldEditor.setText(value); updateLatestVersion(fieldEditor.getText()); } - - public void updateLatestVersion(String code){ + + public void updateLatestVersion(String code) { this.latestVersionCode = code; checkCode(); } - + public void setTokens(ArrayList tokens) { // TODO: Poupulate Tokens table - + DefaultTableModel tbModel = new DefaultTableModel(); - + tbModel.addColumn("Linha"); tbModel.addColumn("Código"); tbModel.addColumn("Token"); - - for(int i = 0; i < tokens.size(); i++){ + + for (int i = 0; i < tokens.size(); i++) { tbModel.addRow(tokens.get(i)); } - - tbLexicon.setModel(tbModel); + + tbLexicon.setModel(tbModel); } - + public void setStacks(ArrayList stacks) { // TODO: Poupulate Tokens table - + DefaultTableModel tbModel = new DefaultTableModel(); - + tbModel.addColumn("Pilha"); - - for(int i = 0; i < stacks.size(); i++){ + + for (int i = 0; i < stacks.size(); i++) { tbModel.addRow(new String[]{stacks.get(i)}); } - - tbSyntatic.setModel(tbModel); + + tbSyntatic.setModel(tbModel); } - - public void clearStacks(){ + + public void clearStacks() { ArrayList stacks = new ArrayList<>(); setStacks(stacks); } - - public void clearTokens(){ + + public void clearTokens() { ArrayList tokens = new ArrayList<>(); setTokens(tokens); } - - public void clearErrors(){ + + public void clearErrors() { txaErrors.setText(""); pnDebug.setVisible(false); } - + public void setErrors(ArrayList tokens) { - - for(int i = 0; i < tokens.size(); i++){ + + if (tokens.isEmpty()) { + txaErrors.setText("✓ Compilado com sucesso!"); + } + + for (int i = 0; i < tokens.size(); i++) { txaErrors.setText("Linha: " + tokens.get(i)[0] + " -> " + tokens.get(i)[1]); } - + + spErrors.setVisible(true); pnDebug.setVisible(true); - splitDebug.setDividerLocation(400); + splitDebug.setDividerLocation(410); } - - private void initListener(){ + + private void initListener() { EditorListener el = new EditorListener(this); ButtonListener bl = new ButtonListener(); - + btnRun.addActionListener(el); btnRun.addMouseListener(bl); btnRun.setEnabled(false); - + btnNew.addActionListener(el); btnNew.addMouseListener(bl); - + btnOpen.addActionListener(el); btnOpen.addMouseListener(bl); - + btnSave.addActionListener(el); btnSave.addMouseListener(bl); - + btnAbout.addActionListener(el); btnAbout.addMouseListener(bl); - + } - - private void initEditor(){ + + private void initEditor() { this.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { - if(unsaved){ - if(JOptionPane.showConfirmDialog(null, "Deseja salvar as alteraçãos antes de sair?", "Salvar alterações", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION){ - btnSave.doClick(); - }; - } - e.getWindow().dispose(); + if (unsaved) { + if (JOptionPane.showConfirmDialog(null, "Deseja salvar as alteraçãos antes de sair?", "Salvar alterações", JOptionPane.YES_NO_OPTION) == JOptionPane.OK_OPTION) { + btnSave.doClick(); + }; } + e.getWindow().dispose(); } + } ); fa = new FiniteAutomaton(new HAL()); - + setIconImage(new ImageIcon(getClass().getResource("../resources/favicon.png")).getImage()); - + fieldEditor = new TextPanelHighLight(); spEditor = new javax.swing.JScrollPane(fieldEditor); txtLineNumber = new TextLineNumber(fieldEditor); - + spEditor.setBorder(null); - + fieldEditor.setBackground(new java.awt.Color(7, 54, 66)); fieldEditor.setBorder(null); fieldEditor.setFont(new java.awt.Font("Monospaced", 0, 14)); @@ -188,34 +193,36 @@ public void keyReleased(KeyEvent e) { checkCode(); } }); - + txtLineNumber.setBorderGap(8); txtLineNumber.setUpdateFont(true); txtLineNumber.setBackground(new java.awt.Color(0, 43, 54)); txtLineNumber.setFont(new java.awt.Font("Monospaced", 0, 14)); txtLineNumber.setForeground(new java.awt.Color(252, 252, 250)); txtLineNumber.setCurrentLineForeground(new java.awt.Color(252, 252, 250)); - + spEditor.setRowHeaderView(txtLineNumber); - + txaErrors.setDisabledTextColor(Color.BLACK); - + pnEditor.add(spEditor); pnDebug.setVisible(false); - + } - - private void checkCode(){ + + private void checkCode() { String currentCode = fieldEditor.getText(); btnRun.setEnabled(!currentCode.isEmpty()); - if(!latestVersionCode.equals(currentCode)) { + if (!latestVersionCode.equals(currentCode)) { this.setTitle("HAL - Analisador *"); unsaved = true; } else { this.setTitle("HAL - Analisador"); unsaved = false; } - }; + } + + ; @SuppressWarnings("unchecked") @@ -455,20 +462,23 @@ public boolean isCellEditable(int rowIndex, int columnIndex) { splitDebug.setLeftComponent(pnAnalysis); pnErrors.setBackground(new java.awt.Color(0, 43, 54)); - pnErrors.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Erro", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Segoe UI", 0, 14), new java.awt.Color(255, 255, 255))); // NOI18N + pnErrors.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(2, 2, 2, 2), "Saída", javax.swing.border.TitledBorder.LEFT, javax.swing.border.TitledBorder.ABOVE_TOP, new java.awt.Font("SansSerif", 0, 14), new java.awt.Color(255, 255, 255))); // NOI18N pnErrors.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); pnErrors.setMinimumSize(new java.awt.Dimension(35, 50)); pnErrors.setPreferredSize(new java.awt.Dimension(100, 150)); pnErrors.setRequestFocusEnabled(false); - pnErrors.setLayout(new javax.swing.BoxLayout(pnErrors, javax.swing.BoxLayout.PAGE_AXIS)); + pnErrors.setLayout(new javax.swing.BoxLayout(pnErrors, javax.swing.BoxLayout.Y_AXIS)); spErrors.setBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); spErrors.setViewportBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1)); - spErrors.setPreferredSize(new java.awt.Dimension(168, 100)); + spErrors.setMinimumSize(new java.awt.Dimension(0, 15)); + spErrors.setPreferredSize(new java.awt.Dimension(164, 100)); spErrors.setRequestFocusEnabled(false); txaErrors.setColumns(20); + txaErrors.setLineWrap(true); txaErrors.setRows(5); + txaErrors.setWrapStyleWord(true); txaErrors.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); txaErrors.setEnabled(false); txaErrors.setFocusable(false);