Hook

Struct Hook 

Source
pub struct Hook {
    pub name: String,
    pub return_type: String,
}
Expand description

Definition of a Parser Hook

After generating the Abstract Syntax Tree (AST), we still need to convert it to the internal objects. This is done by the Parse Tree (PT) and Parser Hooks. The PT uses the body of the rules to prelimilarily convert the AST to a simpler form and the hooks can be used to inject custom validation logic and types to the PT. The goal of the hooks is that the PT will produce the final object ready to be used by the application. Therefore there is no need to do another round of traversing.

The hooks are extern and need to be imported, therefore 3 things need to be defined

  • The module name as a string literal
  • The function name
  • The return type of the function (used to generate appropriate structs higher up in the PT)

The generated import statement depends on the target language:

  • Rust: use {module}::{name};
  • Python: from {module} import {name}
  • TypeScript: import { {name} } from "{module}";

The hooks are implemented as extern functions. The exact implementation depends on the target language. The inputs are:

  • The PT node that is being processed
  • The context object, which contains semantic information, errors, and optionally a custom context

The hook will wrap the PT node with a custom object returned by the hook

Fields§

§name: String

Function name

§return_type: String

Return type

Trait Implementations§

Source§

impl Clone for Hook

Source§

fn clone(&self) -> Hook

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 Hook

Source§

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

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl Freeze for Hook

§

impl RefUnwindSafe for Hook

§

impl Send for Hook

§

impl Sync for Hook

§

impl Unpin for Hook

§

impl UnwindSafe for Hook

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, 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.