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>
impl<'a> AstContext<'a>
Sourcepub 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
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.
Sourcepub 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
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.
Sourcepub 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
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.
Sourcepub fn alloc_stmt(&self, stmt: Stmt<'a>) -> &'a Stmt<'a>
pub fn alloc_stmt(&self, stmt: Stmt<'a>) -> &'a Stmt<'a>
Sourcepub fn alloc_imperative_expr(&self, expr: Expr<'a>) -> &'a Expr<'a>
pub fn alloc_imperative_expr(&self, expr: Expr<'a>) -> &'a Expr<'a>
Sourcepub fn alloc_type_expr(&self, ty: TypeExpr<'a>) -> &'a TypeExpr<'a>
pub fn alloc_type_expr(&self, ty: TypeExpr<'a>) -> &'a TypeExpr<'a>
Sourcepub fn alloc_type_exprs<I>(&self, types: I) -> &'a [TypeExpr<'a>]
pub fn alloc_type_exprs<I>(&self, types: I) -> &'a [TypeExpr<'a>]
Sourcepub fn alloc_expr(&self, expr: LogicExpr<'a>) -> &'a LogicExpr<'a>
pub fn alloc_expr(&self, expr: LogicExpr<'a>) -> &'a LogicExpr<'a>
Allocates a logical expression.
Sourcepub fn alloc_term(&self, term: Term<'a>) -> &'a Term<'a>
pub fn alloc_term(&self, term: Term<'a>) -> &'a Term<'a>
Allocates a first-order term.
Sourcepub fn alloc_terms<I>(&self, terms: I) -> &'a [Term<'a>]
pub fn alloc_terms<I>(&self, terms: I) -> &'a [Term<'a>]
Allocates a slice of terms from an iterator.
Sourcepub fn alloc_np(&self, np: NounPhrase<'a>) -> &'a NounPhrase<'a>
pub fn alloc_np(&self, np: NounPhrase<'a>) -> &'a NounPhrase<'a>
Allocates a noun phrase.
Sourcepub fn alloc_syms<I>(&self, syms: I) -> &'a [Symbol]
pub fn alloc_syms<I>(&self, syms: I) -> &'a [Symbol]
Allocates a slice of symbols from an iterator.
Sourcepub fn alloc_roles<I>(&self, roles: I) -> &'a [(ThematicRole, Term<'a>)]
pub fn alloc_roles<I>(&self, roles: I) -> &'a [(ThematicRole, Term<'a>)]
Allocates a slice of thematic role assignments.
Sourcepub fn alloc_pps<I>(&self, pps: I) -> &'a [&'a LogicExpr<'a>]
pub fn alloc_pps<I>(&self, pps: I) -> &'a [&'a LogicExpr<'a>]
Allocates a slice of prepositional phrase modifiers.
Sourcepub fn predicate(&self, name: Symbol, args: &'a [Term<'a>]) -> &'a LogicExpr<'a>
pub fn predicate(&self, name: Symbol, args: &'a [Term<'a>]) -> &'a LogicExpr<'a>
Creates an atomic predicate: P(t1, t2, ...).
Sourcepub fn binary(
&self,
left: &'a LogicExpr<'a>,
op: TokenType,
right: &'a LogicExpr<'a>,
) -> &'a LogicExpr<'a>
pub fn binary( &self, left: &'a LogicExpr<'a>, op: TokenType, right: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>
Creates a binary operation: left op right.
Sourcepub fn unary(
&self,
op: TokenType,
operand: &'a LogicExpr<'a>,
) -> &'a LogicExpr<'a>
pub fn unary( &self, op: TokenType, operand: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>
Creates a unary operation: op operand.
Sourcepub fn quantifier(
&self,
kind: QuantifierKind,
variable: Symbol,
body: &'a LogicExpr<'a>,
island_id: u32,
) -> &'a LogicExpr<'a>
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.
Sourcepub fn temporal(
&self,
operator: TemporalOperator,
body: &'a LogicExpr<'a>,
) -> &'a LogicExpr<'a>
pub fn temporal( &self, operator: TemporalOperator, body: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>
Creates a temporal operator: PAST(body) or FUTURE(body).
Sourcepub fn aspectual(
&self,
operator: AspectOperator,
body: &'a LogicExpr<'a>,
) -> &'a LogicExpr<'a>
pub fn aspectual( &self, operator: AspectOperator, body: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>
Creates an aspectual operator: PROG(body), PERF(body), etc.
Sourcepub fn voice(
&self,
operator: VoiceOperator,
body: &'a LogicExpr<'a>,
) -> &'a LogicExpr<'a>
pub fn voice( &self, operator: VoiceOperator, body: &'a LogicExpr<'a>, ) -> &'a LogicExpr<'a>
Creates a voice operator: PASSIVE(body).
Sourcepub fn modal(
&self,
vector: ModalVector,
operand: &'a LogicExpr<'a>,
) -> &'a LogicExpr<'a>
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>
impl<'a> Clone for AstContext<'a>
Source§fn clone(&self) -> AstContext<'a>
fn clone(&self) -> AstContext<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more