pub use crate::vm::*;
mod alt;
mod expect;
mod if_;
mod loop_;
mod not;
mod op;
mod parselet;
mod peek;
mod repeat;
mod result;
mod sequence;
mod value;
pub use alt::*;
pub use expect::*;
pub use if_::*;
pub use loop_::*;
pub use not::*;
pub use op::*;
pub use parselet::*;
pub use peek::*;
pub use repeat::*;
pub(super) use result::*;
pub use sequence::*;
pub(super) use value::*;
#[derive(Debug, Clone, PartialEq, PartialOrd)]
pub struct Consumable {
pub leftrec: bool, pub nullable: bool, }
pub trait Compileable: std::fmt::Debug + std::fmt::Display {
fn resolve(&mut self, usages: &mut Vec<Vec<ImlOp>>);
fn finalize(
&mut self,
values: &Vec<ImlValue>,
stack: &mut Vec<(usize, bool)>,
) -> Option<Consumable>;
fn compile(&self, parselet: &ImlParselet) -> Vec<Op>;
fn into_op(self) -> ImlOp
where
Self: Sized + 'static,
{
ImlOp::Compileable(Box::new(self))
}
}