Skip to main content

Token

Struct Token 

Source
pub struct Token {
    pub kind: TokenKind,
    pub text: Arc<str>,
    pub start: usize,
    pub end: usize,
}
Expand description

Token types and token stream for lexer output. Token produced by the lexer and consumed by the parser.

Stores the token kind, original source text, and byte span. The text is kept in an Arc<str> so buffering and lookahead can clone tokens cheaply.

Fields§

§kind: TokenKind

Token classification for parser decision making

§text: Arc<str>

Original source text for precise reconstruction

§start: usize

Starting byte position for error reporting and location tracking

§end: usize

Ending byte position for span calculation and navigation

Implementations§

Source§

impl Token

Source

pub fn new( kind: TokenKind, text: impl Into<Arc<str>>, start: usize, end: usize, ) -> Token

Create a new token with the given kind, source text, and byte span.

§Examples
use perl_token::{Token, TokenKind};

let tok = Token::new(TokenKind::Sub, "sub", 0, 3);
assert_eq!(tok.kind, TokenKind::Sub);
assert_eq!(&*tok.text, "sub");
Source

pub fn try_new( kind: TokenKind, text: impl Into<Arc<str>>, start: usize, end: usize, ) -> Result<Token, TokenSpanError>

Create a token with checked span ordering.

Unlike Token::new, this rejects spans where end < start.

Source

pub fn new_checked( kind: TokenKind, text: impl Into<Arc<str>>, start: usize, end: usize, ) -> Result<Token, TokenSpanError>

Create a token while enforcing span invariants.

Rules:

  • start <= end
  • zero-length spans are accepted for EOF and explicit synthetic unknown tokens
Source

pub fn eof_at(pos: usize) -> Token

Create an EOF token at pos.

Source

pub fn unknown_at(text: impl Into<Arc<str>>, start: usize, end: usize) -> Token

Create an unknown (synthetic) token at start..end.

Source

pub fn span(&self) -> TokenSpan

Return this token’s byte span.

Source

pub fn range(&self) -> Range<usize>

Return this token’s byte span as Range<usize>.

Source

pub fn with_span( &self, start: usize, end: usize, ) -> Result<Token, TokenSpanError>

Clone this token with a new checked span.

Source

pub fn with_kind(&self, kind: TokenKind) -> Token

Clone this token with a new token kind.

Source

pub fn len(&self) -> usize

Return the token span length in bytes.

This uses saturating subtraction so malformed spans (where end < start) are treated as zero-length instead of underflowing.

§Examples
use perl_token::{Token, TokenKind};

let tok = Token::new(TokenKind::Identifier, "foo", 10, 13);
assert_eq!(tok.len(), 3);
Source

pub fn is_empty(&self) -> bool

Return whether the token span is empty.

§Examples
use perl_token::{Token, TokenKind};

let tok = Token::new(TokenKind::Eof, "", 8, 8);
assert!(tok.is_empty());
Source

pub fn display_name(&self) -> &'static str

Return a human-readable display name for this token.

Source

pub fn as_ref_token(&self) -> TokenRef<'_>

Return a borrowed token view over this token.

Trait Implementations§

Source§

impl Clone for Token

Source§

fn clone(&self) -> Token

Returns a duplicate 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 Token

Source§

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

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

impl From<TokenRef<'_>> for Token

Source§

fn from(value: TokenRef<'_>) -> Token

Converts to this type from the input type.
Source§

impl PartialEq for Token

Source§

fn eq(&self, other: &Token) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for Token

Auto Trait Implementations§

§

impl Freeze for Token

§

impl RefUnwindSafe for Token

§

impl Send for Token

§

impl Sync for Token

§

impl Unpin for Token

§

impl UnsafeUnpin for Token

§

impl UnwindSafe for Token

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, dest: *mut u8)

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more