Skip to main content

Lexer

Struct Lexer 

Source
pub struct Lexer {
    file: BufReader<File>,
}
Expand description

The Anillo Lexer

The Anillo Lexer is purposefully simple. Lexemes (or Tokens here) are only delimited by whitespace and “Special Characters” (these are defined in the techincal specification, but generally punctuation like brackets, or special semantic tokens like ‘$’ count as “Special Characters”)

Fields§

§file: BufReader<File>

Implementations§

Source§

impl Lexer

Source

pub fn new(path: &Path) -> Result<Lexer>

Source

pub fn tokenize(&mut self) -> Result<VecDeque<TokenInfo>, Box<dyn Error>>

Eagerly lex the ModuleSource and return a buffer of TokenInfos to the caller.

Lexing here is done as simply as possible (and the language was designed with this in mind). There should be absolutely no look ahead peeking done at this level. Compilation errors at this level are supported, but rare (only really possible if an invalid unicode character is found).

Source

fn parse_str(tok: &str) -> Token

Helper function for tokenize.

Essentially anything that isn’t a Special Character will be lexed here. Where possible, we will store the lexeme in a rich token type (Like keywords). Everything else however will be parsed as identifiers (even numbers). The parser handles converting these to their expected types at AST generation time in parser.rs

Auto Trait Implementations§

§

impl Freeze for Lexer

§

impl RefUnwindSafe for Lexer

§

impl Send for Lexer

§

impl Sync for Lexer

§

impl Unpin for Lexer

§

impl UnsafeUnpin for Lexer

§

impl UnwindSafe for Lexer

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.