Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
261 lines (204 sloc) 8.12 KB
// Parser
grammar DCM_2_0_grammar;
konservierung : ('\n')* 'KONSERVIERUNG_FORMAT 2.0' ('\n')+
kons_kopf
kons_rumpf
;
kons_kopf : (modulkopf_info)?
(funktionsdef)?
(variantendef)?
;
modulkopf_info : (mod_zeile)+
;
mod_zeile : mod_anf_zeile
(mod_fort_zeile)*
;
mod_anf_zeile : 'MODULKOPF' mod_ele_name mod_ele_wert
;
mod_fort_zeile : 'MODULKOPF' mod_ele_wert
;
mod_ele_name : NAME
;
mod_ele_wert : TEXT ('\n')+
;
funktionsdef : 'FUNKTIONEN' '\n'
(funktionszeile )+
'END' ('\n')+
;
funktionszeile : 'FKT' NAME fkt_version fkt_langname
;
fkt_version : TEXT
;
fkt_langname : TEXT ('\n')+
;
variantendef : 'VARIANTENKODIERUNG' '\n'
(variantenkrit )+
'END' ('\n')+
;
variantenkrit : 'KRITERIUM' krit_name (krit_wert)* ('\n')+
;
krit_name : NAME
;
krit_wert : NAME
;
kons_rumpf : ( kenngroesse )*
;
kenngroesse : (kennwert
| kennwerteblock
| kennlinie
| kennfeld
| gruppenstuetzstellen
| kenntext)
;
kennwert : 'FESTWERT' NAME '\n'
kgr_info
(einheit_w)?
'WERT' realzahl '\n'
'END' ('\n')+
| 'FESTWERT' NAME '\n'
kgr_info
(einheit_w)?
'TEXT' TEXT '\n'
'END' ('\n')+
;
kennwerteblock : 'FESTWERTEBLOCK' NAME anzahl_x '\n'
kgr_info
(einheit_w)?
(werteliste_kwb)+
'END' ('\n')+
;
kennlinie : ('KENNLINIE') NAME anzahl_x '\n'
kgr_info
(einheit_x)?
(einheit_w)?
(sst_liste_x)+
(werteliste)+
'END' ('\n')+
| ('FESTKENNLINIE') NAME anzahl_x '\n'
kgr_info
(einheit_x)?
(einheit_w)?
(sst_liste_x)+
(werteliste)+
'END' ('\n')+
| ('GRUPPENKENNLINIE') NAME anzahl_x '\n'
kgr_info
(einheit_x)?
(einheit_w)?
(sst_liste_x)+
(werteliste)+
'END' ('\n')+
;
kennfeld : ('KENNFELD') NAME anzahl_x anzahl_y '\n'
kgr_info
(einheit_x)?
(einheit_y)?
(einheit_w)?
(sst_liste_x)+
kf_zeile_liste
'END' ('\n')+
| ('FESTKENNFELD') NAME anzahl_x anzahl_y '\n'
kgr_info
(einheit_x)?
(einheit_y)?
(einheit_w)?
(sst_liste_x)+
kf_zeile_liste
'END' ('\n')+
| ('GRUPPENKENNFELD') NAME anzahl_x anzahl_y '\n'
kgr_info
(einheit_x)?
(einheit_y)?
(einheit_w)?
(sst_liste_x)+
kf_zeile_liste
'END' ('\n')+
;
gruppenstuetzstellen : 'STUETZSTELLENVERTEILUNG' NAME anzahl_x '\n'
kgr_info
(einheit_x)?
(sst_liste_x)+
'END' ('\n')+
;
kenntext : 'TEXTSTRING' NAME '\n'
kgr_info
'TEXT' TEXT '\n'
'END' ('\n')+
;
kgr_info : (langname)?
(displayname)?
(var_abhangigkeiten)?
(funktionszugehorigkeit)?
;
einheit_x : 'EINHEIT_X' TEXT '\n'
;
einheit_y : 'EINHEIT_Y' TEXT '\n'
;
einheit_w : 'EINHEIT_W' TEXT '\n'
;
langname : 'LANGNAME' TEXT '\n'
;
//displayname : 'DISPLAYNAME' TEXT '\n'
displayname : 'DISPLAYNAME' (NAME|TEXT) '\n'
;
var_abhangigkeiten : 'VAR' var_abh (',' var_abh)* '\n'
;
var_abh : NAME '=' NAME
;
funktionszugehorigkeit : 'FUNKTION' (NAME)+ '\n'
;
anzahl_x : INT
;
anzahl_y : INT
;
werteliste : 'WERT' (realzahl)+ '\n'
;
werteliste_kwb : ('WERT' (realzahl)+ '\n'
| 'TEXT' (TEXT)+ '\n')
;
sst_liste_x : ('ST/X' (realzahl)+ '\n'
| 'ST_TX/X' (TEXT)+ '\n')
;
kf_zeile_liste : (kf_zeile_liste_r+
| kf_zeile_liste_tx+)
;
kf_zeile_liste_r : ('ST/Y' realzahl '\n'
werteliste+)
;
kf_zeile_liste_tx : ('ST_TX/Y' TEXT '\n'
werteliste+)
;
realzahl : (INT
| FLOAT)
;
// Lexer
NAME : LETTER (LETTER|'0'..'9'|'['|']'|'.')*
;
fragment
LETTER : 'A'..'Z'
| 'a'..'z'
| '_'
;
TEXT : '"' ( EscapeSequence | ~('\\'|'"') )* '"'
;
fragment
EscapeSequence : '\\' ('b'|'t'|'n'|'f'|'r'|'\"'|'\''|'\\')
;
fragment
QUOTE : '"'
;
INT : MINUS? ('0' | '1'..'9' '0'..'9'*)
;
FLOAT : MINUS? ('0'..'9')+ '.' ('0'..'9')* Exponent?
| MINUS? '.' ('0'..'9')+ Exponent?
| MINUS? ('0'..'9')+ Exponent
;
MINUS : '-'
;
fragment
Exponent : ('e'|'E') ('+'|'-')? ('0'..'9')+
;
WS : (' '|'\r'|'\t'|'\u000C') {skip();}
;
COMMENT : ('*'|'!'|'.') ( options {greedy=false;} : . )* '\n' {skip();}
;