grammar CommentMacro; /** The grammer begins here, as a series of statements. */ prog: statement+ ; /** Each statement has one or many expressions */ statement : 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 ; number : NUMBER ; nodeType : WHOLEHOG | DP8K | IOP ; /** recursive targeting is non-greedy */ target : ( number | span ) also*? ; span : number THRU number ; also : ALSO target ; SLASH : '/' ; ALSO : ',' ; THRU : '>' ; NEXT : '+' ; PREV : '-' ; CURRENT : '*' ; TIME : 't' ; WHOLEHOG : [hH] ; DP8K : [dD] ; IOP : 'IOP'; NUMBER // intigers or floats : [0-9]+ '.' [0-9]* | '.' [0-9]+ | [0-9]+ ; NEWLINE // return newlines to parser (end-statement signal) : '\r'? '\n' ; WS // ignore whitespace : [ \t]+ -> skip ; COMMENT // toss c and HTML sytle block comments : ( '' | '/*' .*? '*/' ) -> skip ; LINE_COMMENT : ( '//' ~[\r\n]* | '#' ~[\r\n]* ) -> skip ;