Merge pull request #1669 from AleoHQ/abnf-integer-fix

[ABNF] Fix use of integers in literals.
This commit is contained in:
Collin Chin 2022-03-10 12:02:10 -08:00 committed by GitHub
commit 4dd70474f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 20 additions and 36 deletions

View File

@ -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>

View File

@ -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"