Struct ilex::token::Digital

source ·
pub struct Digital<'lex> { /* private fields */ }
Expand description

A digital literal.

See rule::Digital for an explanation on what a “digital” is (briefly, they are generalized number literals).

Note that this crate does not provide general number parsing services; parsing numbers is a complex and subtle undertaking, particularly when it comes to floats. For that, consider reading the source code of the rustc_apfloat library, or another softfloat library.

However, we do provide parsing for a few common cases: decimal, binary, octal, and hexadecimal. For floats, this means that the radix of the mantissa is decimal, binary, octal, or hex, the radix of the exponent is decimal, and the base of the exponent is 10 (for decimal) or 2 (for the others).

Implementations§

source§

impl<'lex> Digital<'lex>

source

pub fn radix(self) -> u8

Returns the radix that this digital literal’s digits were parsed in.

source

pub fn sign(self) -> Option<Sign>

Returns the leading sign of this digital literal, if it had any.

source

pub fn is_positive(self) -> bool

Checks if there was an explicit positive sign.

source

pub fn is_negative(self) -> bool

Checks if there was an explicit positive sign.

source

pub fn sign_span(self) -> Option<SpanId>

Returns the span corresponding to Digital::sign().

source

pub fn digit_blocks(self) -> impl Iterator<Item = SpanId> + 'lex

Returns the point-separated digit chunks of this digital literal.

source

pub fn exponents(self) -> impl Iterator<Item = Digital<'lex>>

Returns the exponents of this digital literal, if it any.

Calling exponents() on any of the returned tokens will yield all exponents that follow.

source

pub fn prefix(self) -> Option<SpanId>

Returns this token’s prefix.

source

pub fn has_prefix(&self, expected: &str) -> bool

Checks whether this identifier has a particular prefix.

source

pub fn suffix(&self) -> Option<SpanId>

Returns this token’s suffix.

source

pub fn has_suffix(&self, expected: &str) -> bool

Checks whether this identifier has a particular prefix.

source

pub fn to_int<N>(self, range: impl RangeBounds<N>, report: &Report) -> N

Parses this token as an integer.

More than one digit block, or any exponents, will be diagnosed as an error.

Parse failures become diagnostics, and an unspecified value is provided for a failed integer.

source

pub fn to_ints<N>(self, range: impl RangeBounds<N>, report: &Report) -> Vec<N>

Parses the blocks of this digital literal as a sequence of integers; this ignores any exponents that follow.

Parse failures become diagnostics, and an unspecified value is provided for a failed integer.

source

pub fn to_float<Fp: Parse>( self, range: impl RangeBounds<Fp>, report: &Report, ) -> Result<Fp, Exotic>

Parses this token as a float. Fp can be any of the float types defined in ilex::fp.

This function supports floats with a mantissa radix that is either 10 or a power of two. In the former case, the base for the exponent is 10; otherwise, it is 2.

Any other radix will produce Err. It is highly recommended to unwrap() the result, since a return value of Exotic is almost certainly a bug.

Parse failures and overflow to infinity will generate diagnostics.

source

pub fn to_float_exact<Fp: Parse>( self, range: impl RangeBounds<Fp>, report: &Report, ) -> Result<Fp, Exotic>

Parses this token as a float, with no rounding. Fp can be any of the float types defined in token::fp.

This function is like Digital::to_float(), except that it also generates a diagnostic if rounding while converting to base 2.

Trait Implementations§

source§

impl<'lex> Clone for Digital<'lex>

source§

fn clone(&self) -> Digital<'lex>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for Digital<'_>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'lex> From<Digital<'lex>> for Any<'lex>

source§

fn from(value: Digital<'lex>) -> Self

Converts to this type from the input type.
source§

impl Spanned for Digital<'_>

source§

fn span(&self, ctx: &Context) -> Span

Returns the span in this syntax element.
source§

fn file<'ctx>(&self, ctx: &'ctx Context) -> File<'ctx>

Forwards to SpanId::file().
source§

fn start(&self, ctx: &Context) -> usize

Forwards to Span::start().
source§

fn end(&self, ctx: &Context) -> usize

Forwards to Span::end().
source§

fn is_empty(&self, ctx: &Context) -> bool

Forwards to Span::is_empty().
source§

fn len(&self, ctx: &Context) -> usize

Forwards to Span::len().
source§

fn text<'ctx>(&self, ctx: &'ctx Context) -> &'ctx str

Forwards to SpanId::text().
source§

fn comments<'ctx>(&self, ctx: &'ctx Context) -> Comments<'ctx>

Forwards to SpanId::comments().
source§

impl<'lex> Token<'lex> for Digital<'lex>

source§

type Rule = Digital

The token this rule was parsed from.
source§

fn context(self) -> &'lex Context

The context that owns this token.
source§

fn spec(self) -> &'lex Spec

The spec that lexed this token.
source§

fn lexeme(self) -> Lexeme<Self::Rule>

Returns this token’s Lexeme.
source§

fn rule(self) -> Option<&'lex Self::Rule>

The rule inside of Token::spec() that this token refers to. Read more
source§

impl<'lex> TryFrom<Any<'lex>> for Digital<'lex>

source§

type Error = WrongKind

The type returned in the event of a conversion error.
source§

fn try_from(value: Any<'lex>) -> Result<Self, Self::Error>

Performs the conversion.
source§

impl<'lex> Copy for Digital<'lex>

Auto Trait Implementations§

§

impl<'lex> Freeze for Digital<'lex>

§

impl<'lex> RefUnwindSafe for Digital<'lex>

§

impl<'lex> Send for Digital<'lex>

§

impl<'lex> Sync for Digital<'lex>

§

impl<'lex> Unpin for Digital<'lex>

§

impl<'lex> UnwindSafe for Digital<'lex>

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

source§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

source§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.