Skip to main content

Parser

Struct Parser 

Source
pub struct Parser<'t> { /* private fields */ }
Expand description

the parser state.

tokens is the lexer’s output (assumed to end in TokenKind::Eof, which lexer::Lexer::tokenize guarantees). pos indexes into it. depth counts active recursive productions for the stack-overflow guard. open_delims stacks the still-open opener tokens and their spans: on a delimiter mismatch the innermost (top) is blamed – its span is the error’s span, per the “blame the opener” rule.

Implementations§

Source§

impl<'t> Parser<'t>

Source

pub fn parse(tokens: &'t [Token]) -> Result<Ast, QalaError>

parse a token stream into an untyped Ast, or return the first syntax error.

the input is expected to be a well-formed token stream ending in TokenKind::Eof (what crate::lexer::Lexer::tokenize produces). an empty program (just [Eof]) parses to an empty item list with no error. fail-fast: the first parse error stops the parse and is returned; later errors are not collected.

Source

pub fn parse_expr(&mut self) -> Result<Expr, QalaError>

parse a single expression at the loosest precedence. a thin alias for expr_bp(0, ExprCtx::Normal); statements call this to read the leaves of the grammar.

Auto Trait Implementations§

§

impl<'t> Freeze for Parser<'t>

§

impl<'t> RefUnwindSafe for Parser<'t>

§

impl<'t> Send for Parser<'t>

§

impl<'t> Sync for Parser<'t>

§

impl<'t> Unpin for Parser<'t>

§

impl<'t> UnsafeUnpin for Parser<'t>

§

impl<'t> UnwindSafe for Parser<'t>

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> 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, 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<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more