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);