A macro pre-processor for ANTLR4.
You should add pre-build event(s) in your IDE of choice to run the antlr4-macro artifact, and thus output standard ANTLR4 grammar files.
You can specify either target file, i.e. -i my-grammar.mg4 or the
entire working directory, i.e. -i ..
You may also enable recursive traversal using -r.
When traversing the directory, only files with extension mg4 will be
processed.
More usage information available at java -jar antlr4-macro.jar -help
C-like macros for your ANTLR4 grammar code.
e.g. #MY_MACRO: 'my macro'; and #MACRO2(A, B): A ' ' B;.
Note: The scope of a macro rule is the entire file it is in.
| Name | Arguments | Output (ANTLR4 grammar code) |
|---|---|---|
lower |
Anything | Its entire argument in lowercase. |
upper |
Anything | Its entire argument in uppercase. |
list |
Anything | Anything (',' Anything)* |
list |
Anything, Delimiter | Anything (Delimeter Anything)* |
Note: You can redefine an in-built macro, however you cannot redefine your own macros.
This will result in the RedefinedMacroRuleException being thrown.
Input:
grammar HelloWorld;
// my macro definitions
#HELLO: 'Hello';
#WORLD: 'World';
// parser rules
helloWorldList1: list(HELLOWORLD1);
helloWorldList2: list(HELLOWORLD2, ' ');
// lexer rules
HELLOWORLD1: #HELLO #WORLD;
HELLOWORLD2: lower('Hello') upper('World');
Rough output:
grammar HelloWorld;
// parser rules
helloWorldList1: HELLOWORLD1 (',' HELLOWORLD1)*;
helloWorldList2: HELLOWORLD2 (' ' HELLOWORLD2)*;
// lexer rules
HELLOWORLD1: 'Hello' 'World';
HELLOWORLD2: 'hello' 'WORLD';
This project is licensed under the MIT license.