llhd 0.16.0

A Low Level Hardware Description that acts as a foundation for building hardware design tools.
Documentation
use crate::liberty::FunctionTerm;

grammar;

pub Function: FunctionTerm = OrTerm;

OrTerm: FunctionTerm = {
	AndTerm,
	<a:OrTerm> OrOperator <b:AndTerm> => FunctionTerm::Or(Box::new(a), Box::new(b)),
};

AndTerm: FunctionTerm = {
	NotTerm,
	<a:AndTerm> AndOperator <b:NotTerm> => FunctionTerm::And(Box::new(a), Box::new(b)),
};

NotTerm: FunctionTerm = {
	PrimaryTerm,
	"!" <NotTerm> => FunctionTerm::Not(Box::new(<>)),
}

PrimaryTerm: FunctionTerm = {
	Atom,
	"(" <OrTerm> ")",
}

Atom: FunctionTerm = <a:r"[a-zA-Z0-9]+"> => FunctionTerm::Atom(a.to_string());

OrOperator = { "+", "|", "||" };
AndOperator = { "*", "&", "&&" };