Skip to content

Commit 0bcffd7

Browse files
full error handler, code refactoring, introduced circle warning
1 parent db18906 commit 0bcffd7

File tree

8 files changed

+426
-437
lines changed

8 files changed

+426
-437
lines changed

resources/input.file

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
G90 T0101 M06
2-
G94 G97 F400 S260 M04 M08
1+
H87 T0101 M06
2+
G94 G97 C400 S260 M04 M08
33
G00 X10 Y10
44
G01 X20 Y20
55
G01 X30 Y50

src/GCODECompiler/GCODE.g

Lines changed: 23 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ options {
2020
@members {
2121
GCODEHandler h;
2222

23-
//public SimpleID3Parser(FileReader fileIn) throws IOException {
2423
public GCODEParser(BufferedReader fileIn) throws IOException {
2524
this(new CommonTokenStream(
2625
new GCODELexer(
@@ -69,68 +68,63 @@ M05 M09 M30 (exit)
6968
*/
7069
7170
// Parser definition
72-
gcode returns [List<String> p]
71+
gCode //returns [List<String> p]
7372
: (c=config {h.printConfig(c);}
74-
mov=gcommall {p=mov; h.printCommand(mov);}
73+
mov=gCommAll {h.printCommand(mov);}
7574
e=exit {h.printExit(e);}
7675
)
7776
;
7877
7978
exit returns [List<String> list]
8079
@init { list = new ArrayList<String>();}
81-
: mv=gcommcoordfast {h.addExit (list, mv);}
82-
//MCODES+ da sistemare perchè c'è il + ma questo prende *
83-
e=mconfig { if(e!=null) list.addAll(e); //per le stringhe
84-
//per i token if(e!=null){for(Token temp: e) {listMove.add(temp.getText());}}
85-
}
80+
: mv=gCommCoordFast {h.addMovement (list, mv);}
81+
a=mConfig {h.addListToStringList(list,a);}
8682
;
8783
8884
config returns [List<String> list]
8985
@init { list = new ArrayList<String>();}
90-
: a=GCODESCOORD {list.add(a.getText());}
91-
b=TCODES {list.add(b.getText());}
92-
c=MCODES {list.add(c.getText());}
93-
(a1=GCODESF b1=GCODESS c1=FCODES d1=SCODES
94-
{if(a1!=null && b1!=null && c1!=null && d1!=null)
95-
list.add($a1.getText()); list.add($b1.getText()); list.add($c1.getText()); list.add($d1.getText());
96-
}
86+
: a=GCODESCOORD {h.addTokenToStringList(list,$a);}
87+
b=TCODES {h.addTokenToStringList(list,$b);}
88+
c=MCODES {h.addTokenToStringList(list,$c);}
89+
( a1=GCODESF {h.addTokenToStringList(list,$a1);}
90+
b1=GCODESS {h.addTokenToStringList(list,$b1);}
91+
c1=FCODES {h.addTokenToStringList(list,$c1);}
92+
d1=SCODES {h.addTokenToStringList(list,$d1);}
9793
)?
98-
d=mconfig {if(d!=null){list.addAll(d);}}
94+
d=mConfig {h.addListToStringList(list,d);}
9995
;
10096
10197
102-
mconfig returns [List<String> list]
98+
mConfig returns [List<String> list]
10399
@init { list = new ArrayList<String>();}
104-
:
105-
(a=MCODES {h.addMCode(list,a);} )*
100+
: ( a=MCODES {h.addTokenToStringList(list,a);}
101+
)*
106102
;
107103
108104
109-
gcommall returns [List<String> listMove]
105+
gCommAll returns [List<String> listMove]
110106
@init { listMove = new ArrayList<String>();}
111-
: mv=gcommcoordfast {h.addMovement (listMove, mv);}
112-
(mw=gcommcoordnoint { h.addMovement (listMove, mw);}
113-
|mx=gcommcoordint { h.addMovement (listMove, mx);} )+
107+
: mv=gCommCoordFast {h.addMovement (listMove, mv);}
108+
( mw=gCommCoordNoInt {h.addMovement (listMove, mw);}
109+
| mx=gCommCoordInt {h.addMovement (listMove, mx);}
110+
)+
114111
;
115112
116113
117-
gcommcoordfast returns [String mv]
114+
gCommCoordFast returns [String mv]
118115
: g=GCODESFAST (x=XCOORD y=YCOORD) {mv = h.createMovement ($g, $x, $y);}
119116
;
120117
121118
122-
gcommcoordnoint returns [String mw]
119+
gCommCoordNoInt returns [String mw]
123120
: g=GCODESINT (x=XCOORD y=YCOORD) {mw = h.createMovement ($g, $x, $y);}
124121
;
125122
126-
gcommcoordint returns [String mx]
123+
gCommCoordInt returns [String mx]
127124
: g=GCODESINTCIRC (x=XCOORD y=YCOORD) (i=ICOORD j=JCOORD) {mx = h.createMovement($g,$x,$y,$i,$j);}
128125
;
129126
130127
//Lexer definition
131-
/*gcomm
132-
: 'G' GCODES;
133-
*/
134128
GCODESCOORD
135129
: 'G' ('90'|'91')
136130
;

src/GCODECompiler/GCODEHandler.java

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,10 @@ public class GCODEHandler {
2323
public static final int LAST_SYNTAX_ERROR = 10;
2424
public static final int MISSING_CHAR = 7;
2525
//codici di errore semantici aggiunti
26-
public static final int ALL_SLOT_LENGTH= 11;
27-
public static final int TITLE_LENGTH= 12;
28-
public static final int ARTIST_LENGTH= 13;
29-
public static final int ALBUM_LENGTH= 14;
30-
public static final int YEAR_LENGTH= 15;
31-
public static final int COMMENT_LENGTH= 16;
32-
//serve per lo stampa slot nel caso leggiamo la grammatica senza header
33-
public int conta = 0;
26+
public static final int LAST_SEMANTIC_ERROR = 20;
27+
//codici di warning
28+
public static final int CIRCLE_NOT_CONNECTING = 21;
29+
public static final int LAST_WARNING = 30;
3430

3531
List<String> errorList;
3632
TokenStream lexerStream;
@@ -64,45 +60,46 @@ void handleError(String[] tokenNames, RecognitionException e, String h, String m
6460
st = st + m;
6561
else /*if(e.token.getType() == MISSING_CHAR)*/
6662
st += " ('" + e.token.getText() + "')" + m;
67-
errorList.add(st);
63+
errorList.add(st);
64+
65+
}
66+
67+
public void myErrorHandler(int code, String tk) {
68+
this.myErrorHandler(code, null, tk);
6869
}
70+
6971

7072
// Gestione errori semantici
71-
void myErrorHandler(int code, Token tk) {
73+
private void myErrorHandler(int code, Token tk, String warning) {
7274
String st;
7375
if (code == TOKEN_ERROR)
7476
st = "Lexical Error " + code;
7577
else if (code < LAST_SYNTAX_ERROR) //è 10
7678
st = "Syntax Error " + code;
77-
else
78-
st = "Errore semantico " + code;
79+
else if (code < LAST_SEMANTIC_ERROR)
80+
st = "Errore semantico " + code;
81+
else
82+
st = "Warning " + code;
7983

80-
//output in base al'errore semantico
81-
switch(code)
82-
{
83-
case 11: st=st+" (Data length error)"; break;
84-
case 12: st=st+" (TITLE length > 30 char)"; break;
85-
case 13: st=st+" (TITLE length < 30 char)"; break;
86-
case 14: st=st+" (ARTIST length > 30 char)"; break;
87-
case 15: st=st+" (ARTIST length < 30 char)"; break;
88-
case 16: st=st+" (ALBUM length > 30 char)"; break;
89-
case 17: st=st+" (ALBUM length < 30 char)"; break;
90-
case 18: st=st+" (YEAR number of digits > 4)"; break;
91-
case 19: st=st+" (YEAR number of digits < 4)"; break;
92-
case 20: st=st+" (Wrong YEAR format 1900-CURRENT YEAR)"; break;
93-
case 21: st=st+" (COMMENT length > 30 char)"; break;
94-
case 22: st=st+" (COMMENT length < 30 char)"; break;
84+
//output in base al codice
85+
switch(code){
86+
case 21:
87+
if(warning!=null) st+=": "+warning;
88+
st+="\nIl disegno potrebbe non essere visualizzato correttamente";
89+
default:
90+
break;
9591
}
9692

9793

9894
if (tk != null)
9995
st += " avvenuto qui: "+tk.getText()+" @"+tk.getTokenIndex()+" [" + tk.getLine() + ", " + (tk.getCharPositionInLine()+1) + "]";
100-
st += ". ";
96+
st += ".\n ";
10197

10298
if (code == TOKEN_ERROR)
10399
st += "Unrecognized token '" + tk.getText() + "'";
104100

105101
errorList.add(st);
102+
System.out.println(st);
106103
}
107104

108105
//utilizzato per creare movimenti e tagli G00 G01
@@ -123,20 +120,23 @@ public String createMovement(Token g, Token x, Token y, Token i, Token j) {
123120
return null;
124121
}
125122

126-
127-
public void addExit (List<String> list, String pd) {
128-
//System.out.println("Movimento-> "+pd);
129-
list.add(pd);
130-
}
131123

132124
public void addMovement (List<String> list, String pd) {
133125
//System.out.println("Movimento-> "+pd);
134-
list.add(pd);
126+
if(pd!=null) list.add(pd);
135127
}
136128

137129
public void addMCode(List<String> list, Token temp) {
138130
//System.out.println("MConfig-> "+temp.getText());
139-
list.add(temp.getText());
131+
if(temp!=null) list.add(temp.getText());
132+
}
133+
134+
public void addTokenToStringList(List<String> list, Token temp) {
135+
if(temp!=null) list.add(temp.getText());
136+
}
137+
138+
public void addListToStringList(List<String> list, List<String> list2) {
139+
if(list2!=null) list.addAll(list2);
140140
}
141141

142142
public void printConfig(List<String> c)

0 commit comments

Comments
 (0)