macro_rules! declare_language {
(
$(#[$the_lang_m:meta])*
$the_lang_v:vis mod $the_lang:ident {
const NAME = $name:expr;
type Kind = $kind:ty;
type Parameter = $param:ty;
const BINDING_OPEN = $binding_open:expr;
const BINDING_CLOSE = $binding_close:expr;
}
) => { ... };
}
Expand description
Declares a new formality language.
This will generate a module with a name you choose that contains various items;
among them will be a struct named FormalityLang
that implements the
Language
trait.
When you use the auto-derives or the term
macro, they will generate
code that references crate::FormalityLang
, so you need to bring that in scope at the root
of your crate (e.g., if you called the module mylang
, you might
add use crate::mylang::FormalityLang
at the root of your crate,
so that the auto-derives can find it.)
See the mdbook for more coverage of how it works.