AstContext

Struct AstContext 

Source
pub struct AstContext<'a> {
    pub exprs: &'a Arena<LogicExpr<'a>>,
    pub terms: &'a Arena<Term<'a>>,
    pub nps: &'a Arena<NounPhrase<'a>>,
    pub syms: &'a Arena<Symbol>,
    pub roles: &'a Arena<(ThematicRole, Term<'a>)>,
    pub pps: &'a Arena<&'a LogicExpr<'a>>,
    pub stmts: Option<&'a Arena<Stmt<'a>>>,
    pub imperative_exprs: Option<&'a Arena<Expr<'a>>>,
    pub type_exprs: Option<&'a Arena<TypeExpr<'a>>>,
}
Expand description

Collection of typed arenas for AST allocation during parsing.

The context holds references to multiple arenas, each specialized for a particular AST node type. This separation allows efficient allocation while maintaining type safety.

§Modes

The context supports two modes:

  • Declarative (default): For natural language parsing to logic
  • Imperative: Adds statement and expression arenas for LOGOS programs

Fields§

§exprs: &'a Arena<LogicExpr<'a>>

Arena for logical expressions (LogicExpr).

§terms: &'a Arena<Term<'a>>

Arena for first-order terms (Term).

§nps: &'a Arena<NounPhrase<'a>>

Arena for noun phrases (NounPhrase).

§syms: &'a Arena<Symbol>

Arena for interned symbols.

§roles: &'a Arena<(ThematicRole, Term<'a>)>

Arena for thematic role assignments.

§pps: &'a Arena<&'a LogicExpr<'a>>

Arena for prepositional phrase modifiers.

§stmts: Option<&'a Arena<Stmt<'a>>>

Optional arena for imperative statements (LOGOS mode).

§imperative_exprs: Option<&'a Arena<Expr<'a>>>

Optional arena for imperative expressions (LOGOS mode).

§type_exprs: Option<&'a Arena<TypeExpr<'a>>>

Optional arena for type expressions (LOGOS mode).

Implementations§

Source§

impl<'a> AstContext<'a>

Source

pub fn new( exprs: &'a Arena<LogicExpr<'a>>, terms: &'a Arena<Term<'a>>, nps: &'a Arena<NounPhrase<'a>>, syms: &'a Arena<Symbol>, roles: &'a Arena<(ThematicRole, Term<'a>)>, pps: &'a Arena<&'a LogicExpr<'a>>, ) -> Self

Creates a new context for declarative (natural language) parsing.

Source

pub fn with_imperative( exprs: &'a Arena<LogicExpr<'a>>, terms: &'a Arena<Term<'a>>, nps: &'a Arena<NounPhrase<'a>>, syms: &'a Arena<Symbol>, roles: &'a Arena<(ThematicRole, Term<'a>)>, pps: &'a Arena<&'a LogicExpr<'a>>, stmts: &'a Arena<Stmt<'a>>, imperative_exprs: &'a Arena<Expr<'a>>, ) -> Self

Creates a context with imperative statement arenas for LOGOS programs.

Source

pub fn with_types( exprs: &'a Arena<LogicExpr<'a>>, terms: &'a Arena<Term<'a>>, nps: &'a Arena<NounPhrase<'a>>, syms: &'a Arena<Symbol>, roles: &'a Arena<(ThematicRole, Term<'a>)>, pps: &'a Arena<&'a LogicExpr<'a>>, stmts: &'a Arena<Stmt<'a>>, imperative_exprs: &'a Arena<Expr<'a>>, type_exprs: &'a Arena<TypeExpr<'a>>, ) -> Self

Creates a context with type expression arena for typed LOGOS programs.

Source

pub fn alloc_stmt(&self, stmt: Stmt<'a>) -> &'a Stmt<'a>

Allocates an imperative statement.

§Panics

Panics if imperative arenas were not initialized.

Source

pub fn alloc_imperative_expr(&self, expr: Expr<'a>) -> &'a Expr<'a>

Allocates an imperative expression.

§Panics

Panics if imperative arenas were not initialized.

Source

pub fn alloc_type_expr(&self, ty: TypeExpr<'a>) -> &'a TypeExpr<'a>

Allocates a type expression.

§Panics

Panics if type expression arena was not initialized.

Source

pub fn alloc_type_exprs<I>(&self, types: I) -> &'a [TypeExpr<'a>]
where I: IntoIterator<Item = TypeExpr<'a>>, I::IntoIter: ExactSizeIterator,

Allocates a slice of type expressions.

§Panics

Panics if type expression arena was not initialized.

Source

pub fn alloc_expr(&self, expr: LogicExpr<'a>) -> &'a LogicExpr<'a>

Allocates a logical expression.

Source

pub fn alloc_term(&self, term: Term<'a>) -> &'a Term<'a>

Allocates a first-order term.

Source

pub fn alloc_terms<I>(&self, terms: I) -> &'a [Term<'a>]
where I: IntoIterator<Item = Term<'a>>, I::IntoIter: ExactSizeIterator,

Allocates a slice of terms from an iterator.

Source

pub fn alloc_np(&self, np: NounPhrase<'a>) -> &'a NounPhrase<'a>

Allocates a noun phrase.

Source

pub fn alloc_syms<I>(&self, syms: I) -> &'a [Symbol]

Allocates a slice of symbols from an iterator.

Source

pub fn alloc_roles<I>(&self, roles: I) -> &'a [(ThematicRole, Term<'a>)]

Allocates a slice of thematic role assignments.

Source

pub fn alloc_pps<I>(&self, pps: I) -> &'a [&'a LogicExpr<'a>]
where I: IntoIterator<Item = &'a LogicExpr<'a>>, I::IntoIter: ExactSizeIterator,

Allocates a slice of prepositional phrase modifiers.

Source

pub fn predicate(&self, name: Symbol, args: &'a [Term<'a>]) -> &'a LogicExpr<'a>

Creates an atomic predicate: P(t1, t2, ...).

Source

pub fn binary( &self, left: &'a LogicExpr<'a>, op: TokenType, right: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>

Creates a binary operation: left op right.

Source

pub fn unary( &self, op: TokenType, operand: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>

Creates a unary operation: op operand.

Source

pub fn quantifier( &self, kind: QuantifierKind, variable: Symbol, body: &'a LogicExpr<'a>, island_id: u32, ) -> &'a LogicExpr<'a>

Creates a quantified formula: ∀x.body or ∃x.body.

Source

pub fn temporal( &self, operator: TemporalOperator, body: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>

Creates a temporal operator: PAST(body) or FUTURE(body).

Source

pub fn aspectual( &self, operator: AspectOperator, body: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>

Creates an aspectual operator: PROG(body), PERF(body), etc.

Source

pub fn voice( &self, operator: VoiceOperator, body: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>

Creates a voice operator: PASSIVE(body).

Source

pub fn modal( &self, vector: ModalVector, operand: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>

Creates a modal operator: □operand or ◇operand.

Trait Implementations§

Source§

impl<'a> Clone for AstContext<'a>

Source§

fn clone(&self) -> AstContext<'a>

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<'a> Copy for AstContext<'a>

Auto Trait Implementations§

§

impl<'a> Freeze for AstContext<'a>

§

impl<'a> !RefUnwindSafe for AstContext<'a>

§

impl<'a> !Send for AstContext<'a>

§

impl<'a> !Sync for AstContext<'a>

§

impl<'a> Unpin for AstContext<'a>

§

impl<'a> !UnwindSafe for AstContext<'a>

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V