Compare commits
12 Commits
main
...
antlr-gram
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
36d3d4214c | ||
|
|
eeaeeec591 | ||
|
|
7095e47d33 | ||
|
|
bb4749db36 | ||
|
|
249d551e5e | ||
|
|
38d2923eae | ||
|
|
ba0d6e64a1 | ||
|
|
80cd1833a6 | ||
|
|
af3a219111 | ||
|
|
ca1593eabc | ||
|
|
2c164b0caa | ||
|
|
04588e2e1c |
3
.gitignore
vendored
3
.gitignore
vendored
@ -8,3 +8,6 @@ dist/
|
||||
htmlcov/
|
||||
.tox/
|
||||
docs/_build/
|
||||
|
||||
.antlr/
|
||||
*.input.txt
|
||||
99
grammar/JinjaGrammar.g4
Normal file
99
grammar/JinjaGrammar.g4
Normal file
@ -0,0 +1,99 @@
|
||||
parser grammar JinjaGrammar;
|
||||
|
||||
options {
|
||||
tokenVocab=JinjaLexer;
|
||||
}
|
||||
|
||||
start : expressions;
|
||||
|
||||
expression
|
||||
: inline_statement
|
||||
| block_statement
|
||||
;
|
||||
|
||||
expressions : expression*;
|
||||
|
||||
list_literal : LSQB SP? list_literal_values? SP? RSQB;
|
||||
list_literal_values
|
||||
:
|
||||
(list_literal_value SP? COMMA SP?)*
|
||||
list_literal_value
|
||||
;
|
||||
list_literal_value
|
||||
: STRING_LITERAL
|
||||
| variable_name
|
||||
;
|
||||
|
||||
variable_name : IDENTIFIER;
|
||||
|
||||
statement_block
|
||||
:
|
||||
STATEMENT_ID_BLOCK SP IDENTIFIER
|
||||
;
|
||||
|
||||
statement_include_template
|
||||
: STRING_LITERAL
|
||||
| list_literal
|
||||
| variable_name
|
||||
;
|
||||
|
||||
statement_include_context
|
||||
: STATEMENT_INCLUDE_WITH_CONTEXT
|
||||
| STATEMENT_INCLUDE_WITHOUT_CONTEXT
|
||||
;
|
||||
|
||||
statement_include
|
||||
: STATEMENT_ID_INCLUDE
|
||||
(SP statement_include_template)
|
||||
(SP STATEMENT_INCLUDE_IGNORE_MISSING)?
|
||||
(SP statement_include_context)?
|
||||
;
|
||||
|
||||
statement_import_file
|
||||
: STRING_LITERAL
|
||||
| variable_name
|
||||
;
|
||||
|
||||
statement_import_variable
|
||||
: variable_name (SP STATEMENT_ID_IMPORT_AS SP variable_name)?
|
||||
;
|
||||
|
||||
statement_import_variable_list
|
||||
: (statement_import_variable SP? COMMA SP?)* statement_import_variable
|
||||
;
|
||||
|
||||
statement_import
|
||||
: STATEMENT_ID_IMPORT SP statement_import_file SP STATEMENT_ID_IMPORT_AS SP variable_name (SP statement_include_context)?
|
||||
| STATEMENT_ID_FROM SP statement_import_file SP STATEMENT_ID_IMPORT SP statement_import_variable_list (SP statement_include_context)?
|
||||
;
|
||||
|
||||
block_end_statement_id
|
||||
: STATEMENT_END_ID_BLOCK
|
||||
| STATEMENT_END_ID_SET
|
||||
;
|
||||
|
||||
// block_statement_with_parameters
|
||||
// : block_statement_id
|
||||
// | block_statement_id
|
||||
// ;
|
||||
|
||||
block_statement_without_parameters
|
||||
: statement_block
|
||||
;
|
||||
|
||||
block_statement_start_content
|
||||
: block_statement_without_parameters
|
||||
// | block_statement_with_parameters
|
||||
;
|
||||
|
||||
inline_statement_content
|
||||
: statement_include
|
||||
| statement_import
|
||||
;
|
||||
|
||||
inline_statement : STATEMENT_OPEN inline_statement_content STATEMENT_CLOSE;
|
||||
|
||||
block_statement_start : STATEMENT_OPEN block_statement_start_content STATEMENT_CLOSE;
|
||||
block_statement_end : STATEMENT_OPEN block_end_statement_id STATEMENT_CLOSE;
|
||||
|
||||
block_statement : block_statement_start expressions block_statement_end;
|
||||
100
grammar/JinjaLexer.g4
Normal file
100
grammar/JinjaLexer.g4
Normal file
@ -0,0 +1,100 @@
|
||||
lexer grammar JinjaLexer;
|
||||
|
||||
TRUE_LOWER : 'true';
|
||||
TRUE_PY : 'True';
|
||||
TRUE
|
||||
: TRUE_LOWER
|
||||
| TRUE_PY
|
||||
;
|
||||
|
||||
FALSE_LOWER : 'false';
|
||||
FALSE_PY : 'False';
|
||||
FALSE
|
||||
: FALSE_LOWER
|
||||
| FALSE_PY
|
||||
;
|
||||
|
||||
BOOLEAN
|
||||
: TRUE
|
||||
| FALSE
|
||||
;
|
||||
|
||||
NONE_LOWER : 'none';
|
||||
NONE_PY : 'None';
|
||||
NONE
|
||||
: NONE_LOWER
|
||||
| NONE_PY
|
||||
;
|
||||
|
||||
LPAR : '(';
|
||||
LSQB : '[';
|
||||
LBRACE : '{';
|
||||
RPAR : ')';
|
||||
RSQB : ']';
|
||||
RBRACE : '}';
|
||||
DOT : '.';
|
||||
COLON : ':';
|
||||
COMMA : ',';
|
||||
SEMI : ';';
|
||||
PLUS : '+';
|
||||
MINUS : '-';
|
||||
STAR : '*';
|
||||
SLASH : '/';
|
||||
VBAR : '|';
|
||||
AMPER : '&';
|
||||
LESS : '<';
|
||||
GREATER : '>';
|
||||
EQUAL : '=';
|
||||
PERCENT : '%';
|
||||
EQEQUAL : '==';
|
||||
NOTEQUAL : '!=';
|
||||
LESSEQUAL : '<=';
|
||||
GREATEREQUAL : '>=';
|
||||
TILDE : '~';
|
||||
CIRCUMFLEX : '^';
|
||||
LEFTSHIFT : '<<';
|
||||
RIGHTSHIFT : '>>';
|
||||
DOUBLESTAR : '**';
|
||||
DOUBLESLASH : '//';
|
||||
AT : '@';
|
||||
RARROW : '->';
|
||||
ELLIPSIS : '...';
|
||||
EXCLAMATION : '!';
|
||||
|
||||
STATEMENT_OPEN : '{%' SP?;
|
||||
STATEMENT_CLOSE : SP? '%}';
|
||||
|
||||
EXPRESSION_OPEN : '{{';
|
||||
EXPRESSION_CLOSE : '}}';
|
||||
|
||||
COMMENT_OPEN : '{#';
|
||||
COMMENT_CLOSE : '#}';
|
||||
|
||||
STRING_LITERAL : STRING_LITERAL_SINGLE_QUOTE | STRING_LITERAL_DOUBLE_QUOTE;
|
||||
fragment STRING_LITERAL_SINGLE_QUOTE : '\'' (~[\\\r\n'])* '\'';
|
||||
fragment STRING_LITERAL_DOUBLE_QUOTE : '"' (~[\\\r\n"])* '"';
|
||||
|
||||
SP : [ \t\f]+;
|
||||
|
||||
// Statement identifiers for built-in statements
|
||||
|
||||
STATEMENT_ID_BLOCK : 'block';
|
||||
STATEMENT_END_ID_BLOCK : 'endblock';
|
||||
STATEMENT_ID_FROM : 'from';
|
||||
STATEMENT_ID_IMPORT : 'import';
|
||||
STATEMENT_ID_INCLUDE : 'include';
|
||||
STATEMENT_ID_RAW : 'raw';
|
||||
STATEMENT_ID_SET : 'set';
|
||||
STATEMENT_END_ID_SET : 'endset';
|
||||
|
||||
STATEMENT_ID_IMPORT_AS : 'as';
|
||||
|
||||
STATEMENT_INCLUDE_IGNORE_MISSING : 'ignore missing';
|
||||
STATEMENT_INCLUDE_WITH_CONTEXT : 'with context';
|
||||
STATEMENT_INCLUDE_WITHOUT_CONTEXT : 'without context';
|
||||
|
||||
END_STATEMENT_ID_PREFIX : 'end';
|
||||
|
||||
IDENTIFIER : IDENTIFIER_START IDENTIFIER_CONTINUE*;
|
||||
fragment IDENTIFIER_START : [a-zA-Z_];
|
||||
fragment IDENTIFIER_CONTINUE : [a-zA-Z0-0_];
|
||||
Loading…
Reference in New Issue
Block a user