From 7758b76c7d8e70b976f0b9fc1919df390d1eaab6 Mon Sep 17 00:00:00 2001 From: Kevin Matz Date: Sat, 20 Oct 2018 13:21:57 -0400 Subject: [PATCH] grammar improvements --- CommentMacro.g4 | 121 +++++++++++++++++++++++------------------------- README.md | 4 +- 2 files changed, 59 insertions(+), 66 deletions(-) diff --git a/CommentMacro.g4 b/CommentMacro.g4 index c194b45..4cb21ab 100644 --- a/CommentMacro.g4 +++ b/CommentMacro.g4 @@ -1,52 +1,52 @@ grammar CommentMacro; -/** The grammer begins here, as a series of statements. */ -prog: statement+ ; +/** + ** Parser Rules + **/ -/** Each statement has one or many expressions */ -statement - : macro NEWLINE - | NEWLINE - ; +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 + : '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 @@ -56,43 +56,36 @@ nodeType /** recursive targeting is non-greedy */ target - : ( number | span ) also*? + : ( number | span ) (',' target)* ; span : number THRU number ; -also - : ALSO target - ; +number : NUMBER ; -SLASH : '/' ; -ALSO : ',' ; -THRU : '>' ; -NEXT : '+' ; -PREV : '-' ; -CURRENT : '*' ; -TIME : 't' ; + +/** + ** LEXAR Rules + **/ + +SLASH : '/' ; +THRU : '>' ; +NEXT : '+' ; +PREV : '-' ; +CURRENT : '*' ; +TIME : 't' ; WHOLEHOG : [hH] ; DP8K : [dD] ; IOP : 'IOP'; -NUMBER // intigers or floats - : [0-9]+ '.' [0-9]* - | '.' [0-9]+ - | [0-9]+ - ; +fragment DIGIT : [0-9] ; +NUMBER : DIGIT+ ('.' DIGIT+)? ; -NEWLINE // return newlines to parser (end-statement signal) - : '\r'? '\n' - ; - -WS // ignore whitespace - : [ \t]+ - -> skip - ; +NEWLINE : '\r'? '\n' ; // return newlines to parser +WS : [ \t]+ -> skip ; // ignore whitespace COMMENT // toss c and HTML sytle block comments : ( '' @@ -100,7 +93,7 @@ COMMENT // toss c and HTML sytle block comments ) -> skip ; -LINE_COMMENT +LINE_COMMENT // ignore inline commkents : ( '//' ~[\r\n]* | '#' ~[\r\n]* ) -> skip diff --git a/README.md b/README.md index 7e5ab33..8139765 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ You must also install the ANTLR tool. On a mac with homebrew, do: Clone this repository and building the lexer and parser for Python3 -> $ antlr4 -Dlanguage=Python3 CommentMacro.g4 +> $ antlr -Dlanguage=Python3 CommentMacro.g4 @@ -46,6 +46,6 @@ These Comment Macros do not have supporting equivelents in OSC: Pleas feel welcome to submit pull requests or patches that enable support for: * Sending target ranges as batches -* Multiple comment macros per line +* More than one comment macros per line * Send multi-macro line as a batch * Timing on master fades