Added EBNF grammar.
This commit is contained in:
parent
b2a5fef6ad
commit
b2f78ef78e
1 changed files with 22 additions and 0 deletions
|
@ -36,6 +36,28 @@
|
||||||
A version list denoted by '@' is associated with the compiler only if
|
A version list denoted by '@' is associated with the compiler only if
|
||||||
if it comes immediately after the compiler name. Otherwise it will be
|
if it comes immediately after the compiler name. Otherwise it will be
|
||||||
associated with the current package spec.
|
associated with the current package spec.
|
||||||
|
|
||||||
|
Here is the EBNF grammar for a spec:
|
||||||
|
|
||||||
|
spec-list = { spec [ dep-list ] }
|
||||||
|
dep_list = { ^ spec }
|
||||||
|
spec = id [ options ]
|
||||||
|
options = { @version-list | +variant | -variant | ~variant | %compiler }
|
||||||
|
variant = id
|
||||||
|
compiler = id [ version-list ]
|
||||||
|
version-list = version [ { , version } ]
|
||||||
|
version = id | id: | :id | id:id
|
||||||
|
id = [A-Za-z0-9_][A-Za-z0-9_.-]*
|
||||||
|
|
||||||
|
There is one context-sensitive part: ids in versions may contain '.', while
|
||||||
|
other ids may not.
|
||||||
|
|
||||||
|
There is one ambiguity: since '-' is allowed in an id, you need to put
|
||||||
|
whitespace space before -variant for it to be tokenized properly. You can
|
||||||
|
either use whitespace, or you can just use ~variant since it means the same
|
||||||
|
thing. Spack uses ~variant in directory names and in the canonical form of
|
||||||
|
specs to avoid ambiguity. Both are provided because ~ can cause shell
|
||||||
|
expansion when it is the first character in an id typed on the command line.
|
||||||
"""
|
"""
|
||||||
from functools import total_ordering
|
from functools import total_ordering
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue