1
0
Fork 0
baconscript/CommentMacro.g4

101 lines
3.0 KiB
ANTLR

grammar CommentMacro;
/**
** Parser Rules
**/
prog : statement+ EOF ;
statement : macro (':' macro)* NEWLINE
| NEWLINE
;
macro
: 'GM' master (device)? // Go Master
| 'GM' master SLASH number (device)? // Go Master
| 'HM' master (device)? // Halt Master
| 'AM' master (device)? // Assert Master
| 'RM' master (device)? // Relesae Master
| 'RA' (device)? // Release All
| 'RO' (device)? // Release Others
| 'FM' master SLASH number (time)? (device)? // Fade Master
| 'FGM' number (time)? (device)? // Fade Grand Master
| 'CM' number (device)? // Choose Master
| 'GL' target (device)? // Go List
| 'GL' target SLASH number (device)? // Go List
| 'HL' target (device)? // Halt List
| 'AL' target (device)? // Assert List
| 'RL' target (device)? // Release List
| 'GB' target (device)? // Go Batch
| 'HB' target (device)? // Halt Batch
| 'AB' target (device)? // Assert Batch
| 'RB' target (device)? // Release Batch
| 'GS' target (device)? // Go Scene
| 'HS' target (device)? // Halt Scene
| 'AS' target (device)? // Assert Scene
| 'RS' target (device)? // Release Scene
| 'CP' number (device)? // Change Page
| 'CP' NEXT (device)? // Next Page
| 'CP' PREV (device)? // Prev Page
| 'RV' number (device)? // Recall View
| 'RN' device // Reset Node
| 'GK' number (device)? // Go Keystroke Macro
| 'HK' number (device)? // Halt Keystroke Macro
| 'RK' number (device)? // Stop Keystroke Macro
;
master : (target | CURRENT) ;
time : TIME number ;
device : nodeType number ;
nodeType
: WHOLEHOG
| DP8K
| IOP
;
/** recursive targeting is non-greedy */
target
: ( number | span ) (',' target)*
;
span
: number THRU number
;
number : NUMBER ;
/**
** LEXAR Rules
**/
SLASH : '/' ;
THRU : '>' ;
NEXT : '+' ;
PREV : '-' ;
CURRENT : '*' ;
TIME : 't' ;
WHOLEHOG : [hH] ;
DP8K : [dD] ;
IOP : 'IOP';
fragment DIGIT : [0-9] ;
NUMBER : DIGIT+ ('.' DIGIT+)? ;
NEWLINE : '\r'? '\n' ; // return newlines to parser
WS : [ \t]+ -> skip ; // ignore whitespace
COMMENT // toss c and HTML sytle block comments
: ( '<!--' .*? '-->'
| '/*' .*? '*/'
) -> skip
;
LINE_COMMENT // ignore inline commkents
: ( '//' ~[\r\n]*
| '#' ~[\r\n]*
) -> skip
;