-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGrammar.txt
71 lines (55 loc) · 1.43 KB
/
Grammar.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
file:
< statement NEWLINE > +
statement:
variable-assignment
| rule
| build
| default
| pool
| include
| subninja
build:
BUILD filename-list ':' IDENTIFIER filename-list NEWLINE [ BEGIN_SCOPE variable-assignments END_SCOPE ]
rule:
RULE IDENTIFIER NEWLINE BEGIN_SCOPE variable-assignments END_SCOPE
pool:
POOL IDENTIFIER NEWLINE BEGIN_SCOPE variable-assignments END_SCOPE
default:
DEFAULT filename-list
include:
INCLUDE filename-list
subninja:
SUBNINJA filename-list
variable-assignments:
< variable-assignment NEWLINE > +
variable-assignment:
variable '=' variable-text
| single-filename-variable ':=' filename
| multi-filename-variable ':=' [ filename-list ] BEGIN_SCOPE multi-line-filename-list END_SCOPE
filename-list:
filename
| multi-file-variable
| filename-list SPACE filename
| filename-list SPACE multi-file-variable
multi-line-filename-list:
filename
| multi-file-variable
| filename-list [SPACE | NEWLINE] filename
| filename-list [SPACE | NEWLINE] multi-file-variable
filename:
literal-filename
explicit-filename
| single-file-variable
literal-filename:
< WORD | variable > +
variable-text:
< variable-text-component > *
variable-text-component:
WORD
| explicit-filename
| SPACE
| variable
| single-filename-variable
| multi-filename-variable
explicit-filename:
'{{' < WORD SPACE > + '}}'