New grammar.md
This commit is contained in:
parent
fb81dd1e29
commit
2f38f6b86e
61
grammar.md
Normal file
61
grammar.md
Normal file
@ -0,0 +1,61 @@
|
||||
justfile grammar
|
||||
----------------
|
||||
|
||||
The justfiles are processed with a mildly context-sensitive
|
||||
tokenizer and a recursive descent parser. The grammar is mostly LL(1),
|
||||
altough an extra token of lookahead is used to distinguish between
|
||||
export assignments and recipes with arguments.
|
||||
|
||||
tokens
|
||||
======
|
||||
|
||||
```
|
||||
BACKTICK = `[^`\n\r]*`
|
||||
COLON = :
|
||||
COMMENT = #([^!].*)?$
|
||||
EOL = \n|\r\n
|
||||
EQUALS = =
|
||||
INTERPOLATION_START = {{
|
||||
INTERPOLATION_END = }}
|
||||
NAME = [a-zA-Z_-][a-zA-Z0-9_-]*
|
||||
PLUS = +
|
||||
RAW_STRING = '[^'\r\n]*'
|
||||
STRING = "[^"]*" # also processes \n \r \t \" \\ escapes
|
||||
INDENT = emitted when indentation increases
|
||||
DEDENT = emitted when indentation decreases
|
||||
LINE = emitted before a recipe line
|
||||
TEXT = recipe text, only matches in a recipe body
|
||||
```
|
||||
|
||||
grammar
|
||||
=======
|
||||
|
||||
```
|
||||
justfile : item* EOF
|
||||
|
||||
item : recipe
|
||||
| assignment
|
||||
| export
|
||||
| EOL
|
||||
|
||||
assignment : NAME EQUALS expression EOL
|
||||
|
||||
export : 'export' assignment
|
||||
|
||||
expression : STRING
|
||||
| RAW_STRING
|
||||
| NAME
|
||||
| expression '+' expression
|
||||
|
||||
recipe : NAME arguments? ':' dependencies? body?
|
||||
|
||||
arguments : NAME+
|
||||
|
||||
dependencies : NAME+
|
||||
|
||||
body : INDENT line+ DEDENT
|
||||
|
||||
line : LINE (TEXT | interpolation)+ EOL
|
||||
|
||||
interpolation : '{{' expression '}}'
|
||||
```
|
Loading…
Reference in New Issue
Block a user