diff options
Diffstat (limited to 'semiring/src/lib.rs')
-rw-r--r-- | semiring/src/lib.rs | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/semiring/src/lib.rs b/semiring/src/lib.rs index 9d096db..6c0e0d5 100644 --- a/semiring/src/lib.rs +++ b/semiring/src/lib.rs @@ -15,6 +15,8 @@ //! description. Specifically, it will produce items as it parses the //! input string. Then we can execute these items by any interpreter. +use grammar::Grammar; + /// A semiring is equipped with two operations: the addition and the /// multiplication. It also has additive and multiplicative /// identities. Also the two operations are supposed to be @@ -29,14 +31,20 @@ pub trait Semiring { fn one() -> Self; /// The addition. - fn add(&mut self, other: impl AsRef<Self>); + fn add(&mut self, other: &Self); /// The multiplication. - fn mul(&mut self, other: impl AsRef<Self>); + fn mul(&mut self, other: &Self); + + /// A valuation associates a semiring value from a rule position. + /// + /// Since a position is not complete without a grammar, we also + /// give it a grammar. + fn valuation(pos: usize, grammar: &Grammar) -> Self; } -// TODO: Implement boolean semiring -// TODO: Implement counting semiring +pub mod counting; + // TODO: Implement derivation forest semiring #[cfg(test)] |