all I have grammar and when I parse file have following exception on line 113.
[document, program, programs]>>token:[@285,1521:1526='N20G91',<126>,113:0] line:113 charPositionInLine:0 e.token.getText():N20G91
But, when I see on the grammar I suppouse that line N20G91 will be parsed with rule
gcode : GCODE^ xvalue? yvalue? ivalue? jvalue? GCODE? FCODE? ; I.e. first is line number "N20" then I have GCODE G91 But, it's not happends. Have the parsing error instead Where I'm wrong?
Regards, Vladimir
p.s. Please, see grammar and file for the parsing below
grammar LST;
options {
language = Java;
output = AST;
ASTLabelType = CommonTree;
}
tokens {
LINENUMBER;
BEGIN_PROGRAMM;
} // imaginary token
@lexer::namespace {
PortalRoboter.Module.LaserProgramImport.LST
}
@parser::namespace {
PortalRoboter.Module.LaserProgramImport.LST
}
@parser::header {
}
@lexer::header {
}
@members {
public String getErrorMessage(RecognitionException e, String[] tokenNames) {
List stack = getRuleInvocationStack(e, this.getClass().getName());
String msg = null;
if (e instanceof NoViableAltException) {
NoViableAltException nvae = (NoViableAltException) e;
msg = " no viable alt; token=" + e.token + " (decision="
+ nvae.decisionNumber + " state " + nvae.stateNumber + ")"
+ " decision=<<" + nvae.grammarDecisionDescription + ">>";
} else {
msg = "token:" + e.token + " line:" + e.line + " charPositionInLine:"
+ e.charPositionInLine + " e.token.getText():"
+ e.token.getText();
}
throw new RuntimeException(stack + ">>" + msg);
}
public String getTokenErrorDisplay(Token t) {
retu t.toString();
}
}
/*
* Parser Rules
*/
/*
* Lexer Rules
*/
/*|
(params | programs)+ */
document
:
(
BD! SET_METRIC?
| CLEAR!
| ED!
| nextfile
| einrichtplan
| sheettech
| sheetload
| maschineload
| lltstamm
| lltcalls
| consumption_times
| sheetmeasure
| topsdata
| laserhead
| partsinprogram
| partsinprogrampos
| fertigungsauftragtmp
| globaldataset
| programproperties
| partorderinprodorder
| leadin
| partsunloaddata
| partspalletdata
| microjpoint
| program
| programinfo
)*
;
nextfile
:
C_NEXT_FILE^ FILENAME
;
einrichtplan
:
BEGIN_EINRICHTEPLAN_INFO^ params+ ENDE_EINRICHTEPLAN_INFO
;
programproperties
:
BEGIN_PROGRAM_PROPERTIES^ params+ ENDE_PROGRAM_PROPERTIES
;
partorderinprodorder
:
BEGIN_PARTORDER_IN_PRODORDER^ params+ ENDE_PARTORDER_IN_PRODORDER
;
leadin
:
BEGIN_LEAD_IN^ params+ ENDE_LEAD_IN
;
partsunloaddata
:
BEGIN_PARTS_UNLOAD_DATA^ params+ ENDE_PARTS_UNLOAD_DATA
;
partspalletdata
:
BEGIN_PARTS_PALLET_DATA^ params+ ENDE_PARTS_PALLET_DATA
;
sheettech
:
BEGIN_SHEET_TECH^ params+ ENDE_SHEET_TECH
;
programinfo
:
BEGIN_PROGRAM_INFORMATION^ params+ ENDE_PROGRAM_INFORMATION
;
sheetload
:
BEGIN_SHEET_LOAD_DATA^ params+ ENDE_SHEET_LOAD_DATA
| BEGIN_SHEET_LOAD^ params+ ENDE_SHEET_LOAD
;
maschineload
:
BEGIN_MACHINE_LOAD_DATA^ params+ ENDE_MACHINE_LOAD_DATA
;
lltstamm
:
BEGIN_LTT_STAMM^ params+ ENDE_LTT_STAMM
;
lltcalls
:
BEGIN_LTT_CALLS^ params+ ENDE_LTT_CALLS
;
consumption_times
:
BEGIN_CONSUMPTION_TIMES^ params+ ENDE_CONSUMPTION_TIMES
;
sheetmeasure
:
BEGIN_SHEET_MEASURE^ params+ ENDE_SHEET_MEASURE
;
topsdata
:
BEGIN_TOPS_DATA^ params+ ENDE_TOPS_DATA
;
laserhead
:
BEGIN_LASER_HEAD^ .* ENDE_LASER_HEAD
;
partsinprogram
:
BEGIN_PARTS_IN_PROGRAM^ params+ ENDE_PARTS_IN_PROGRAM
;
fertigungsauftragtmp
:
BEGIN_FERTIGUNG_AUFTRAG_TMP^ params+ ENDE_FERTIGUNG_AUFTRAG_TMP
;
globaldataset
:
BEGIN_GLOBAL_DATASET^ params+ ENDE_GLOBAL_DATASET
;
partsinprogrampos
:
BEGIN_PARTS_IN_PROGRAM_POS^ params+ ENDE_PARTS_IN_PROGRAM_POS
;
microjpoint
:
BEGIN_MICROJOINT^ params+ ENDE_MICROJOINT
;
program
:
BEGIN_PROGRAMM^
(
params
| programs
)+
ENDE_PROGRAMM!
;
params
:
CLEAR!
| INTCLEAR!
| ZA^ COMMA! MM (param)+
| MM^ COMMA! AT (param)+ PARATYPE
| ZA^ COMMA! DA (param)+
| DA^ (param)+
| SET_METRIC
;
param
:
COMMA!
(
INTVALUE
| STRING
| FLOATVALUE
| BOOL
| KG
| MIN
| MM
)
| COMMA!
| NEWLINE!
;
programs
:
START_TEXT^ nccomads* STOP_TEXT!
;
nccomads
:
linenumber command? comment?
;
linenumber
:
LINENUMBER
;
command
:
gcode
| mcode
| fcode
| trans
| rot
| def
| assign
| tc_POS_LEVEL
| tc_LASER_OFF
| tc_LASER_ON
| tc_FOCUS_OFFSET_ON
| tc_FOCUS_OFFSET_OFF
| tc_LEAD_IN
| tc_SHEET_THICK
| tc_LASERCORR_ON
| tc_PCS_PIERCE
| tc_SHEET_TECH
| tc_PART_END
| tc_LASER_HEAD
| tc_SHEET_LOAD
| tc_MICROJOINT
| msg
| pos GCODE?
| prgindentifier
;
prgindentifier
:
PRGIDENTIFIER^
;
pos
:
(
xvalue yvalue
->
^(GCODE xvalue yvalue)
| xvalue
->
^(GCODE xvalue)
| yvalue
->
^(GCODE yvalue)
)
;
trans
:
TRANS^ xvalue? yvalue?
;
rot
:
ROT^ (RPL floatvalue)?
;
def:
DEF^ vartypes ';' variable '=' variable
;
gcode
:
GCODE^ xvalue? yvalue? ivalue? jvalue? GCODE? FCODE?
;
mcode
:
MCODE^
;
assign
:
VARIABLE '=' '$' VARIABLE
;
fcode
:
FCODE^
| F '=' VARIABLE '*' floatvalue
(
FNORM
| FLIN
)
;
comment
:
COMMENT
;
tc_POS_LEVEL
:
TC_POS_LEVEL^ PAR_OPEN! floatvalue PAR_CLOSE!
;
tc_LASER_ON
:
TC_LASER_ON^ PAR_OPEN! INTVALUE COMMA! IDENTIFIER COMMA! INTVALUE COMMA! INTVALUE PAR_CLOSE!
;
tc_LASER_OFF
:
TC_LASER_OFF^ PAR_OPEN! INTVALUE PAR_CLOSE!
;
tc_FOCUS_OFFSET_ON
:
TC_FOCUS_OFFSET_ON
;
tc_FOCUS_OFFSET_OFF
:
TC_FOCUS_OFFSET_OFF
;
tc_LEAD_IN
:
TC_LEAD_IN PAR_OPEN! IDENTIFIER? COMMA! VALUELEFTRIGHT PAR_CLOSE!
;
tc_SHEET_THICK
:
TC_SHEET_THICK^ PAR_OPEN! IDENTIFIER? PAR_CLOSE!
;
tc_LASERCORR_ON
:
TC_LASERCORR_ON^ PAR_OPEN! VALUELEFTRIGHT PAR_CLOSE!
;
tc_PCS_PIERCE
:
TC_PCS_PIERCE
;
tc_MICROJOINT
:
TC_MICROJOINT^ PAR_OPEN! IDENTIFIER PAR_CLOSE!
;
tc_SHEET_TECH
:
TC_SHEET_TECH^ PAR_OPEN! IDENTIFIER PAR_CLOSE!
;
tc_SHEET_LOAD
:
TC_SHEET_LOAD^ PAR_OPEN! IDENTIFIER PAR_CLOSE!
;
tc_PART_END
:
TC_PART_END^ PAR_OPEN! INTVALUE PAR_CLOSE!
;
tc_LASER_HEAD
:
TC_LASER_HEAD^ PAR_OPEN! IDENTIFIER PAR_CLOSE!
;
msg
:
MSG^ PAR_OPEN! IDENTIFIER PAR_CLOSE!
;
xvalue
:
'X'
(
floatvalue
| ('=IC') PAR_OPEN floatvalue PAR_CLOSE
)
->
^(X floatvalue)
| 'X' INTVALUE
->
^(X INTVALUE)
;
yvalue
:
'Y'
(
floatvalue
| ('=IC') PAR_OPEN floatvalue PAR_CLOSE
)
->
^(Y floatvalue)
| 'Y' INTVALUE
->
^(Y INTVALUE)
;
ivalue
:
'I' floatvalue
->
^(I floatvalue)
| 'I' INTVALUE
->
^(I INTVALUE)
;
jvalue
:
'J' floatvalue
->
^(J floatvalue)
| 'J' INTVALUE
->
^(J INTVALUE)
;
floatvalue
:
FLOATVALUE^
;
vartypes
:
VARTYPEREAL
| VARTYPEINT
;
WS
:
(
' '
| 't'
| 'n'
| 'r'
| 'f'
)+
{
skip();
}
;
LINENUMBER
:
N INTVALUE
;
C_NEXT_FILE
:
C '_' N E X T '_' F I L E ('_' S T A R T)?
;
BEGIN_PROGRAM_INFORMATION
:
B E G I N '_' P R O G R A M '_' I N F O R M A T I O N
;
ENDE_PROGRAM_INFORMATION
:
E N D E '_' P R O G R A M '_' I N F O R M A T I O N
;
BEGIN_PROGRAMM
:
B E G I N '_' P R O G R A M M
;
ENDE_PROGRAMM
:
E N D E '_' P R O G R A M M
;
BEGIN_PARTS_IN_PROGRAM_POS
:
B E G I N '_' P A R T S '_' I N '_' P R O G R A M '_' P O S
;
ENDE_PARTS_IN_PROGRAM_POS
:
E N D E '_' P A R T S '_' I N '_' P R O G R A M '_' P O S
;
BEGIN_PARTS_IN_PROGRAM
:
B E G I N '_' P A R T S '_' I N '_' P R O G R A M
;
ENDE_PARTS_IN_PROGRAM
:
E N D E '_' P A R T S '_' I N '_' P R O G R A M
;
BEGIN_FERTIGUNG_AUFTRAG_TMP
:
B E G I N '_' F E R T I G U N G '_' A U F T R A G '_' T M P
;
ENDE_FERTIGUNG_AUFTRAG_TMP
:
E N D E '_' F E R T I G U N G '_' A U F T R A G '_' T M P
;
BEGIN_GLOBAL_DATASET
:
B E G I N '_' G L O B A L '_' D A T A S E T
;
ENDE_GLOBAL_DATASET
:
E N D E '_' G L O B A L '_' D A T A S E T
;
BEGIN_MICROJOINT
:
B E G I N '_' M I C R O J O I N T
;
ENDE_MICROJOINT
:
E N D E '_' M I C R O J O I N T
;
BEGIN_SHEET_LOAD_DATA
:
B E G I N '_' S H E E T '_' L O A D '_' D A T A
;
ENDE_SHEET_LOAD_DATA
:
E N D E '_' S H E E T '_' L O A D '_' D A T A
;
BEGIN_SHEET_LOAD
:
B E G I N '_' S H E E T '_' L O A D
;
ENDE_SHEET_LOAD
:
E N D E '_' S H E E T '_' L O A D
;
BEGIN_SHEET_TECH
:
B E G I N '_' S H E E T '_' T E C H
;
ENDE_SHEET_TECH
:
E N D E '_' S H E E T '_' T E C H
;
BEGIN_EINRICHTEPLAN_INFO
:
B E G I N '_' E I N R I C H T E P L A N '_' I N F O
;
ENDE_EINRICHTEPLAN_INFO
:
E N D E '_' E I N R I C H T E P L A N '_' I N F O
;
BEGIN_PARTORDER_IN_PRODORDER
:
B E G I N '_' P A R T O R D E R '_' I N '_' P R O D O R D E R
;
ENDE_PARTORDER_IN_PRODORDER
:
E N D E '_' P A R T O R D E R '_' I N '_' P R O D O R D E R
;
BEGIN_PROGRAM_PROPERTIES
:
B E G I N '_' P R O G R A M '_' P R O P E R T I E S
;
ENDE_PROGRAM_PROPERTIES
:
E N D E '_' P R O G R A M '_' P R O P E R T I E S
;
BEGIN_LEAD_IN
:
B E G I N '_' L E A D '_' I N
;
ENDE_LEAD_IN
:
E N D E '_' L E A D '_' I N
;
BEGIN_PARTS_UNLOAD_DATA
:
B E G I N '_' P A R T S '_' U N L O A D '_' D A T A
;
ENDE_PARTS_UNLOAD_DATA
:
E N D E '_' P A R T S '_' U N L O A D '_' D A T A
;
BEGIN_PARTS_PALLET_DATA
:
B E G I N '_' P A R T S '_' P A L L E T '_' D A T A
;
ENDE_PARTS_PALLET_DATA
:
E N D E '_' P A R T S '_' P A L L E T '_' D A T A
;
START_TEXT
:
S T A R T '_' T E X T
;
STOP_TEXT
:
S T O P '_' T E X T
;
TC_POS_LEVEL
:
T C '_' P O S '_' L E V E L
;
TC_SHEET_THICK
:
T C '_' S H E E T '_' T H I C K
;
TC_LASER_ON
:
T C '_' L A S E R '_' O N
;
TC_LASER_OFF
:
T C '_' L A S E R '_' O F F
;
TC_FOCUS_OFFSET_ON
:
T C '_' F O C U S '_' O F F S E T '_' O N
;
TC_FOCUS_OFFSET_OFF
:
T C '_' F O C U S '_' O F F S E T '_' O F F
;
TC_LEAD_IN
:
T C '_' L E A D '_' I N
;
TC_LASERCORR_ON
:
T C '_' L A S E R C O R R '_' O N
;
TC_PCS_PIERCE
:
T C '_' P C S '_' P I E R C E
;
TC_MICROJOINT
:
T C '_' M I C R O J O I N T
;
TC_SHEET_TECH
:
T C '_' S H E E T '_' T E C H
;
BEGIN_MACHINE_LOAD_DATA
:
B E G I N '_' M A C H I N E '_' L O A D '_' D A T A
;
ENDE_MACHINE_LOAD_DATA
:
E N D E '_' M A C H I N E '_' L O A D '_' D A T A
;
BEGIN_LTT_STAMM
:
B E G I N '_' L T T '_' S T A M M
;
ENDE_LTT_STAMM
:
E N D E '_' L T T '_' S T A M M
;
BEGIN_LTT_CALLS
:
B E G I N '_' L T T '_' C A L L S
;
ENDE_LTT_CALLS
:
E N D E '_' L T T '_' C A L L S
;
BEGIN_CONSUMPTION_TIMES
:
B E G I N '_' C O N S U M P T I O N '_' T I M E S
;
ENDE_CONSUMPTION_TIMES
:
E N D E '_' C O N S U M P T I O N '_' T I M E S
;
BEGIN_SHEET_MEASURE
:
B E G I N '_' S H E E T '_' M E A S U R E
;
ENDE_SHEET_MEASURE
:
E N D E '_' S H E E T '_' M E A S U R E
;
BEGIN_TOPS_DATA
:
B E G I N '_' T O P S '_' D A T A
;
ENDE_TOPS_DATA
:
E N D E '_' T O P S '_' D A T A
;
BEGIN_LASER_HEAD
:
B E G I N '_' L A S E R '_' H E A D
;
ENDE_LASER_HEAD
:
E N D E '_' L A S E R '_' H E A D
;
TC_SHEET_LOAD
:
T C '_' S H E E T '_' L O A D
;
TC_PART_END
:
T C '_' P A R T '_' E N D
;
TC_LASER_HEAD
:
T C '_' L A S E R '_' H E A D
;
SET_METRIC
:
S E T '_' M E T R I C
;
FILENAME
:
'='
(
'A'..'Z'
| 'a'..'z'
| '0'..'9'
| '_'
| '-'
)+
'.' L S T
;
COMMENT
:
';'
(
~(
'n'
| 'r'
)
)*
(
'n'
| 'r'
)
;
MSG
:
M S G
;
PAR_OPEN
:
'('
;
PAR_CLOSE
:
')'
;
COMMA
:
','
;
HIGHCOMMA
:
'"'
;
INTVALUE
:
('-')? ('0'..'9')+
;
VALUELEFTRIGHT
:
T '_' L E F T
| T '_' R I G H T
;
FLOATVALUE
:
INTVALUE ('.' INTVALUE)?
;
GCODE
:
G INTVALUE
;
MCODE
:
M INTVALUE
;
FCODE
:
F FLOATVALUE
;
FLIN
:
F L I N
;
FNORM
:
F N O R M
;
TRANS
:
T R A N S
;
ROT
:
R O T
;
RPL
:
R P L '='
;
DEF
:
D E F
;
ZA
:
Z A
;
MM
:
M M
;
AT
:
A T
;
DA
:
D A
;
BD
:
B D
;
ED
:
E D
;
CLEAR
:
C
;
INTCLEAR
:
INTVALUE CLEAR
;
PARATYPE
:
T
| Z
;
STRING
:
{
String val = "";
}
''' i= ( ~(''' ))* '''
{
val += i;
}
;
IDENTIFIER
:
HIGHCOMMA ( ~(HIGHCOMMA ))* HIGHCOMMA
;
BOOL
:
B O O L
;
MIN
:
M I N
;
KG
:
K G
;
VARTYPEREAL
:
R E A L
;
VARTYPEINT
:
I N T
;
PRGIDENTIFIER
:
S P
(
'A'..'Z'
| 'a'..'z'
| '0'..'9'
| '_'
| '-'
)+
;
fragment
ACTUAL_FEED
:
A C T U A L '_' F E E D
;
variable:VARIABLE;
fragment
NEWLINE
:
'*'
;
fragment
A
:
(
'a'
| 'A'
)
;
fragment
B
:
(
'b'
| 'B'
)
;
fragment
C
:
(
'c'
| 'C'
)
;
fragment
D
:
(
'd'
| 'D'
)
;
fragment
E
:
(
'e'
| 'E'
)
;
fragment
F
:
(
'f'
| 'F'
)
;
fragment
G
:
(
'g'
| 'G'
)
;
fragment
H
:
(
'h'
| 'H'
)
;
fragment
I
:
(
'i'
| 'I'
)
;
fragment
J
:
(
'j'
| 'J'
)
;
fragment
K
:
(
'k'
| 'K'
)
;
fragment
L
:
(
'l'
| 'L'
)
;
fragment
M
:
(
'm'
| 'M'
)
;
fragment
N
:
(
'n'
| 'N'
)
;
fragment
O
:
(
'o'
| 'O'
)
;
fragment
P
:
(
'p'
| 'P'
)
;
fragment
Q
:
(
'q'
| 'Q'
)
;
fragment
R
:
(
'r'
| 'R'
)
;
fragment
S
:
(
's'
| 'S'
)
;
fragment
T
:
(
't'
| 'T'
)
;
fragment
U
:
(
'u'
| 'U'
)
;
fragment
V
:
(
'v'
| 'V'
)
;
fragment
W
:
(
'w'
| 'W'
)
;
fragment
X
:
(
'x'
| 'X'
)
;
fragment
Y
:
(
'y'
| 'Y'
)
;
fragment
Z
:
(
'z'
| 'Z'
)
;
VARIABLE
:
(
'A'..'Z'
| 'a'..'z'
| '0'..'9'
| '_'
| '-'
)+
;
File for parsing is
BD
SET_METRIC
BEGIN_PARTORDER_IN_PRODORDER
C
ZA,MM,5
C
ZA,DA,13
C
ENDE_PARTORDER_IN_PRODORDER
C
ED
C
BD
SET_METRIC
BEGIN_EINRICHTEPLAN_INFO
C
ZA,MM,28
C
ZA,DA,1
DA,'L20',1,'Sin 840D',1,'Keller Laser','Job113348_1','Rene','29.04.2016',
* 'JOB113348',8,'/TRUMPF.NET/Workfiles/User1/Job113348/Job113348_1.LST',
C
ENDE_EINRICHTEPLAN_INFO
C
BEGIN_PROGRAM_PROPERTIES
C
ZA,MM,4
ENDE_PROGRAM_PROPERTIES
C
BEGIN_SHEET_TECH
C
ZA,MM,14
C
ZA,DA,1
DA,'SHT-1',3000.00,1500.00,6.00,1,3000.00,1500.00,'1.0332-0600',7.850,0.0,
* 'ST37',0,4.00,2
C
ENDE_SHEET_TECH
C
BEGIN_MACHINE_LOAD_DATA
C
ZA,MM,9
C
ENDE_MACHINE_LOAD_DATA
C
BEGIN_SHEET_LOAD_DATA
C
ZA,MM,21
ENDE_SHEET_LOAD_DATA
C
BEGIN_LTT_STAMM
C
ZA,MM,242
C
ZA,DA,1
DA,'ST060MD0-O2S0-30-2','TW516ks','20.04.08','',
* 'St37 6.0mm 5000W 250mm O2 TC23 Standard',1,0,'TC23',5000,'St37-60',
C
ENDE_LTT_STAMM
C
BEGIN_LTT_CALLS
C
ZA,MM,1
C
ENDE_LTT_CALLS
C
BEGIN_PARTS_IN_PROGRAM
C
ZA,MM,23
C
ENDE_PARTS_IN_PROGRAM
C
BEGIN_PARTS_IN_PROGRAM_POS
C
ZA,DA,21
C
ENDE_PARTS_IN_PROGRAM_POS
C
BEGIN_MICROJOINT
C
DA,'MIJO-1',0,0,0.00,0.00,0.00,-1.00,-1.00,-1.00,-1.00,11,1
C
ENDE_MICROJOINT
C
BEGIN_LEAD_IN
C
ZA,MM,28
C
ENDE_LEAD_IN
C
BEGIN_PARTS_PALLET_DATA
C
ZA,MM,13
ENDE_PARTS_PALLET_DATA
C
BEGIN_CONSUMPTION_TIMES
C
ZA,MM,7
C
ZA,DA,26
C
ENDE_CONSUMPTION_TIMES
C
BEGIN_TOPS_DATA
C
ZA,MM,10
C
ENDE_TOPS_DATA
C
BEGIN_PROGRAMM
START_TEXT
N10 MSG("UNTERPROGRAMMNUMMER,SP1Job113348_1")
N20G91
N30;(TEILENUMMER:3)
STOP_TEXT
C
ENDE_PROGRAMM
C
ED
C
