These were removed in a previous commit, because they are already classified as
(boolean) literals, but they were accidentally re-introduced, presumably due to
the type alias RFC referencing the previous version of the keyword grammar rule.
Since, with the introduction of (ASCII and Unicode escapes for) characters, we
now have digits in base 10, 8, and 16, it seems worth being more explicit in the
naming of decimal digits in the grammar.
Just a nonterminal name change, not a structural change to the grammar.
Move the rule for 'digit' just before the ones for 'octal-digit' and
'hexadecimal-digit'.
Update the comments accordingly.
No real change to the grammar here.
Before this commit, 'true' and 'false' were both keywords and boolean literals,
making the grammar slightly more ambiguous than it needs to be. This manifests
in the formal specification of lexing and parsing, which would need an
additional extra-grammatical predicate requiring 'true' and 'false' to be
boolean literals and not keywords. By making 'true' and 'false' just boolean
literals, we obviate that need.
Extend the comment about identifiers and package names not being keywords or
aleo1... to also exclude boolean literals.
This is similar to the grammar of Java, in which 'true', 'false', and 'null' are
not keywords.
This does not necessitate any change to the lexer/parser, which already performs
its own procedural disambiguation of this and other aspects of the grammar.
Add to the rule for package names, as a comment, the same exclusion added to the
rule for identifiers. Also add a few lines to describe it.
Also discuss the disambiguation of identifiers and package names.
Given that we have string literals now, there is no need for the special notion
of format strings. Some other grammar rules go away as they were only involved
in the definition of format strings.
The well-formedness of containers in format strings is now delegated to the
static semantics of Leo: at the grammar level, any string literals is accepted
in console print calls.
Explain the new syntax for circuit member variables.
Explain the tighter syntax for import declarations.
Keep lines to 80 columns max, so that they fit well in the figures in the LaTeX
document.
Now the comment says that an identifier must not only be distinct from a
keyword, but also not be or start with 'aleo1'. Even though the grammar does not
capture these extra-grammatical requirements, we use comments to at least
mention them prominently.
Explain better variable and constant declarations.
Leave one blank line between the rules for variable and constant declarations
(not necessary for ABNF, but consistent with the rest of the file and actually
expected by the ABNF-to-LaTeX converter).
Limit lines to 80 columns, by putting the rules for variable and constant
declarations over two lines each, with proper indentation.