mirror of
https://github.com/AleoHQ/leo.git
synced 2024-12-20 08:01:42 +03:00
[ABNF] Fix use of integers in literals.
This removes the rule for `integer` and uses `natural` for all numeric literals. Otherwise, lexing would be context-dependent for no good reason. This is consistent with the lexer and parser of the Leo compiler. Note that, for instance, `-1field` is not a literal, but rather a unary expression where `-` is applied to the literal `1field`. This is consistent with other languages too.
This commit is contained in:
parent
646c5eb697
commit
7e930d8670
@ -643,17 +643,6 @@ We allow leading zeros, e.g. `007`.
|
|||||||
natural = 1*decimal-digit
|
natural = 1*decimal-digit
|
||||||
```
|
```
|
||||||
|
|
||||||
An integer (number) is either a natural or its negation.
|
|
||||||
We allow leading zeros also in negative numbers, e.g. `-007`.
|
|
||||||
|
|
||||||
<a name="integer"></a>
|
|
||||||
```abnf
|
|
||||||
integer = [ "-" ] natural
|
|
||||||
```
|
|
||||||
|
|
||||||
Go to: _[natural](#user-content-natural)_;
|
|
||||||
|
|
||||||
|
|
||||||
Unsigned literals are naturals followed by unsigned types.
|
Unsigned literals are naturals followed by unsigned types.
|
||||||
|
|
||||||
<a name="unsigned-literal"></a>
|
<a name="unsigned-literal"></a>
|
||||||
@ -664,38 +653,38 @@ unsigned-literal = natural ( %s"u8" / %s"u16" / %s"u32" / %s"u64" / %s"u128" )
|
|||||||
Go to: _[natural](#user-content-natural)_;
|
Go to: _[natural](#user-content-natural)_;
|
||||||
|
|
||||||
|
|
||||||
Signed literals are integers followed by signed types.
|
Signed literals are naturals followed by signed types.
|
||||||
|
|
||||||
<a name="signed-literal"></a>
|
<a name="signed-literal"></a>
|
||||||
```abnf
|
```abnf
|
||||||
signed-literal = integer ( %s"i8" / %s"i16" / %s"i32" / %s"i64" / %s"i128" )
|
signed-literal = natural ( %s"i8" / %s"i16" / %s"i32" / %s"i64" / %s"i128" )
|
||||||
```
|
```
|
||||||
|
|
||||||
Go to: _[integer](#user-content-integer)_;
|
Go to: _[natural](#user-content-natural)_;
|
||||||
|
|
||||||
|
|
||||||
Field literals are integers followed by the type of field elements.
|
Field literals are naturals followed by the type of field elements.
|
||||||
|
|
||||||
<a name="field-literal"></a>
|
<a name="field-literal"></a>
|
||||||
```abnf
|
```abnf
|
||||||
field-literal = integer %s"field"
|
field-literal = natural %s"field"
|
||||||
```
|
```
|
||||||
|
|
||||||
Go to: _[integer](#user-content-integer)_;
|
Go to: _[natural](#user-content-natural)_;
|
||||||
|
|
||||||
|
|
||||||
There are two kinds of group literals.
|
There are two kinds of group literals.
|
||||||
One is a single integer followed by the type of group elements,
|
One is a single natural followed by the type of group elements,
|
||||||
which denotes the scalar product of the generator point by the integer.
|
which denotes the scalar product of the generator point by the natural.
|
||||||
The other kind is not a token because it allows some whitespace inside;
|
The other kind is not a token because it allows some whitespace inside;
|
||||||
therefore, it is defined in the syntactic grammar.
|
therefore, it is defined in the syntactic grammar.
|
||||||
|
|
||||||
<a name="product-group-literal"></a>
|
<a name="product-group-literal"></a>
|
||||||
```abnf
|
```abnf
|
||||||
product-group-literal = integer %s"group"
|
product-group-literal = natural %s"group"
|
||||||
```
|
```
|
||||||
|
|
||||||
Go to: _[integer](#user-content-integer)_;
|
Go to: _[natural](#user-content-natural)_;
|
||||||
|
|
||||||
|
|
||||||
Boolean literals are the usual two.
|
Boolean literals are the usual two.
|
||||||
@ -1080,10 +1069,10 @@ because it consists of affine point coordinates.
|
|||||||
|
|
||||||
<a name="group-coordinate"></a>
|
<a name="group-coordinate"></a>
|
||||||
```abnf
|
```abnf
|
||||||
group-coordinate = integer / "+" / "-" / "_"
|
group-coordinate = [ "-" ] natural / "+" / "-" / "_"
|
||||||
```
|
```
|
||||||
|
|
||||||
Go to: _[integer](#user-content-integer)_;
|
Go to: _[natural](#user-content-natural)_;
|
||||||
|
|
||||||
|
|
||||||
<a name="affine-group-literal"></a>
|
<a name="affine-group-literal"></a>
|
||||||
|
@ -456,30 +456,25 @@ annotation-name = "@" identifier
|
|||||||
|
|
||||||
natural = 1*decimal-digit
|
natural = 1*decimal-digit
|
||||||
|
|
||||||
; An integer (number) is either a natural or its negation.
|
|
||||||
; We allow leading zeros also in negative numbers, e.g. `-007`.
|
|
||||||
|
|
||||||
integer = [ "-" ] natural
|
|
||||||
|
|
||||||
; Unsigned literals are naturals followed by unsigned types.
|
; Unsigned literals are naturals followed by unsigned types.
|
||||||
|
|
||||||
unsigned-literal = natural ( %s"u8" / %s"u16" / %s"u32" / %s"u64" / %s"u128" )
|
unsigned-literal = natural ( %s"u8" / %s"u16" / %s"u32" / %s"u64" / %s"u128" )
|
||||||
|
|
||||||
; Signed literals are integers followed by signed types.
|
; Signed literals are naturals followed by signed types.
|
||||||
|
|
||||||
signed-literal = integer ( %s"i8" / %s"i16" / %s"i32" / %s"i64" / %s"i128" )
|
signed-literal = natural ( %s"i8" / %s"i16" / %s"i32" / %s"i64" / %s"i128" )
|
||||||
|
|
||||||
; Field literals are integers followed by the type of field elements.
|
; Field literals are naturals followed by the type of field elements.
|
||||||
|
|
||||||
field-literal = integer %s"field"
|
field-literal = natural %s"field"
|
||||||
|
|
||||||
; There are two kinds of group literals.
|
; There are two kinds of group literals.
|
||||||
; One is a single integer followed by the type of group elements,
|
; One is a single natural followed by the type of group elements,
|
||||||
; which denotes the scalar product of the generator point by the integer.
|
; which denotes the scalar product of the generator point by the natural.
|
||||||
; The other kind is not a token because it allows some whitespace inside;
|
; The other kind is not a token because it allows some whitespace inside;
|
||||||
; therefore, it is defined in the syntactic grammar.
|
; therefore, it is defined in the syntactic grammar.
|
||||||
|
|
||||||
product-group-literal = integer %s"group"
|
product-group-literal = natural %s"group"
|
||||||
|
|
||||||
; Boolean literals are the usual two.
|
; Boolean literals are the usual two.
|
||||||
|
|
||||||
@ -688,7 +683,7 @@ named-type = identifier / self-type / scalar-type
|
|||||||
; This is an affine group literal,
|
; This is an affine group literal,
|
||||||
; because it consists of affine point coordinates.
|
; because it consists of affine point coordinates.
|
||||||
|
|
||||||
group-coordinate = integer / "+" / "-" / "_"
|
group-coordinate = [ "-" ] natural / "+" / "-" / "_"
|
||||||
|
|
||||||
affine-group-literal = "(" group-coordinate "," group-coordinate %s")group"
|
affine-group-literal = "(" group-coordinate "," group-coordinate %s")group"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user