Parser

Struct Parser 

Source
pub struct Parser { /* private fields */ }
Expand description

Represents the parses that parses the tokens and returns the resulting expression according to the following grammer. This grammer is traversed in a top-down, left-to-right manner. The lower rule is, the higher precedence it has. Therefore the parser will start parsing from the top rule but will go down to the lower rules if it finds a match.

§Syntax Grammer

Program     -> Decleration* EOF ;

§Declarations

Declaration -> ClassDecl | FunDecl | VarDecl | Statement ;
ClassDecl   -> "class" IDENTIFIER ( "<" IDENTIFIER )? "{" Function* "}" ;
FunDecl     -> "fun" Function ;
VarDecl     -> "var" IDENTIFIER ( "=" Expression )? ";" ;

§Statements

Statement   -> ExprStmt | ForStmt | IfStmt | PrintStmt | ReturnStmt | BreakStmt | WhileStmt | Block ;
ExprStmt    -> Expression ";" ;
ForStmt     -> "for" "(" ( VarDecl | ExprStmt | ";" ) Expression? ";" Expression? ")" Statement ;
IfStmt      -> "if" "(" Expression ")" Statement ( "else" Statement )? ;
PrintStmt   -> "print" Expression ";" ;
ReturnStmt  -> "return" Expression? ";" ;
BreakStmt   -> "break" ";" ;
WhileStmt   -> "while" "(" Expression ")" Statement ;
Block       -> "{" Decleration* "}" ;

§Expressions

Expression  -> Assignment ;
Assignment  -> ( Call "." )? IDENTIFIER "=" Assignment | LogicOr ;
LogicOr     -> LogicAnd ( "or" LogicAnd )* ;
LogicAnd    -> Equality ( "and" Equality )* ;
Equality    -> Comparison ( ( "!=" | "==" ) Comparison )* ;
Comparison  -> Term ( ( ">" | ">=" | "<" | "<=" ) Term )* ;
Term        -> Factor ( ( "+" | "-" ) Factor )* ;
Factor      -> Unary ( ( "*" | "/" ) Unary )* ;
Unary       -> ( "!" | "-" ) Unary | Call ;
Call        -> Primary ( "(" Arguments? ")" | "." IDENTIFIER )* ;
Primary     -> NUMBER | STRING | "false" | "true" | "null" | "this" | "(" Expression ")" | IDENTIFIER | "super" "." IDENTIFIER ;

§Misc

Function    -> IDENTIFIER "(" Parameters? ")" Block ;
Parameters  -> IDENTIFIER ( "," IDENTIFIER )* ;
Arguments   -> Expression ( "," Expression )* ;

Implementations§

Source§

impl Parser

Source

pub fn new(tokens: Vec<Token>) -> Self

Creates a new parser with the given tokens.

Source

pub fn parse(&mut self) -> Vec<Stmt>

Parses the tokens and returns the resulting expression.

Auto Trait Implementations§

§

impl Freeze for Parser

§

impl RefUnwindSafe for Parser

§

impl Send for Parser

§

impl Sync for Parser

§

impl Unpin for Parser

§

impl UnwindSafe for Parser

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.